如何等待网络流有数据可供读取?

2023-11-23

我的应用程序中有一个工作线程负责三件不同的事情。对其中两个作业的请求出现在我编写的队列中,当网络流上出现请求时,另一个作业就会被激活。我希望我的工作线程在没有工作要做时等待。这对于两个队列来说很容易,因为它们公开了一个 ManualResetEvent,该事件在它们有项目时设置,但是 NetworkStream 似乎没有这个。已从 TcpClient 检索 NetworkStream。

我所追求的是看起来像这样的代码:

while (notDone)
{
    WaitHandle.WaitAny(new WaitHandle[] { queue1.HasData, queue2.HasData, netStream.HasData } );
    // ...
    if (netStream.DataAvailable)
    {
        netStream.Read(buffer, 0, 20);
        // process buffer
    }
}

有谁知道如何获取当 NetworkStream 有数据时设置的 WaitHandle 吗?


您可以使用 NetworkStream 的异步方法并在 EndReceive 方法中设置 ManualResetEvent。

// ...
netStream.BeginRead(buffer, offset, callback, state);
// ...

回调方法内部

netStream.EndRead(ar);
netStreamManualResetEvent.Set();

那么你的代码

while (notDone)
{
    WaitHandle.WaitAny(new WaitHandle[] { queue1.HasData, queue2.HasData, netStreamManualResetEvent} );
    // ...
    if (netStream.DataAvailable)
    {
        // make the buffer from the AsyncState in the callback method available here
        // process buffer
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何等待网络流有数据可供读取? 的相关文章

  • 具有不同大小结构的结构数组的 malloc()

    如果每个结构都包含一个大小不同的字符串数组 那么如何正确地 malloc 一个结构数组 因此每个结构可能有不同的大小 并且不可能 realloc 结构体数量 sizeof 结构体名称 after malloc 初始大小 sizeof 结构名
  • 通过增加索引之和来生成排序组合的有效方法

    对于启发式算法 我需要一个接一个地评估特定集合的组合 直到达到停止标准 由于它们很多 目前我正在使用以下内存高效迭代器块生成它们 受到 python 的启发 itertools combinations http docs python o
  • clang 格式换行符在错误的位置

    给出以下代码行 get abc manager get platform status abc platform status sw update status fill update status actions allowed stat
  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • 为什么大多数平台上没有“aligned_realloc”?

    MSVC有自己的非标准函数 aligned malloc aligned realloc and aligned free C 17和C11引入了 std aligned alloc 其结果可以是de分配有free or realloc B
  • 选择列表逻辑应位于 ASP.NET MVC、视图、模型或控制器中的什么位置?

    我觉得我的问题与这个问题很接近 但我想对这样的代码应该放在哪里进行更一般的讨论 Asp Net MVC SelectList 重构问题 https stackoverflow com questions 2149855 asp net mv
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • C# 委托责任链

    为了我的理解目的 我实现了责任链模式 Abstract Base Type public abstract class CustomerServiceDesk protected CustomerServiceDesk nextHandle
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 如何随着分辨率的变化自动调整大小和调整表单控件

    我注意到某些应用程序会更改控件的位置以尽可能适应当前的分辨率 例如 如果窗口最大化 则控件的设置方式应使整个 GUI 看起来平衡 是否可以使用 C 在 Visual studio 2010 中制作或实现此功能 Use Dock http m
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 初始化 LPCTSTR /LPCWSTR [重复]

    这个问题在这里已经有答案了 我很难理解并使其正常工作 基本上归结为我无法成功初始化这种类型的变量 它需要有说的内容7 2E25DC9D 0 USB003 有人可以解释 展示这种类型的正确初始化和类似的值吗 我已查看此站点上的所有帮助 将项目
  • 如何引用解决方案之外的项目?

    我有一个 Visual Studio C 解决方案 其中包含一些项目 其中一个项目需要引用另一个不属于解决方案的项目 一开始我引用了dll
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • Eclipse 调试器是否支持保存/恢复或检查点/倒回?

    我的意思如下 通过一个例子来说明 我启动我的 Java 应用程序 它恰好是一个模拟器 该应用程序运行了 1 小时并失败 我想在调试模式下重新启动我的应用程序 将其运行到第 59 分钟 然后开始单步执行代码 在任何时候 我都想回到第 59 分
  • 我的 php 网站被作为图像上传的代码攻击了..?

    昨天我的网站被收录了 攻击者将index php 文件更改为他们自己的 包含他们所有的荣耀消息和问候语 我已将此情况通知托管公司 我们在专用服务器上运行 就我而言 我正在尝试修复任何似乎是原因的问题 因为我仍然无法指出我们的问题到底是如何发
  • 将 HTML 编码从 UTF-8 切换到 UTF-16 时可能会出现什么问题?

    对于 HTML 编码从 UTF 8 更改为 UTF 16 有何影响 我想知道您对这个问题的想法 在做出这样的改变之前我需要考虑一些事情吗 注意 由于我需要处理大量的日文和中文文本 所以很感兴趣 我能想到一些会出错的事情 您必须在 HTTP
  • Proguard:避免与预混淆的库 JAR 发生命名冲突

    看来 Proguard 在重命名 重新打包类时并没有尝试避免与库 JAR 中的类发生命名冲突 这是正确的 还是我配置不正确 我正在混淆使用最新 Google AdMob SDK 的 Android 应用程序 之前我使用旧的 AdMob SD
  • 如何通过 Apache Camel 调用 RESTful 服务?

    我目前正在使用 HTTP 方法来调用某些 URL 这将产生 JIRA 问题 现在我想使用 Apache Camel 我该如何使用它 我需要通过Camel调用以下链接 http localhost 8080 rest api 2 projec
  • 如何在 POSIX sh 中获取脚本目录?

    我的 bash 脚本中有以下代码 现在我想在 POSIX sh 中使用它 我该如何转换它 DIR cd dirname BASH SOURCE 0 gt dev null pwd The POSIX shell sh counterpart
  • 在react/redux应用程序中隐藏api url(代理)

    我担心我的 React Redux 应用程序的安全性 因为我的 api url 在捆绑的 app js 文件中向公众公开 我一直在研究这个 一些开发人员以某种方式代理它 即我可以使用而不是使用我的 api urlapi 每当我与类似的库进行
  • 如何查找加载到进程中的DLL及其位置等

    我使用过 Process Explorer 但我忘记了另一个实用程序 它可以让您查看进程从何处加载 图像文件 以及内存中的 dll 以及它们从何处加载 Process Explorer 对我来说仅适用于托管程序集 还有什么是原生的吗 Pro
  • 移动 numpy 数组中的元素

    这个问题在底部包含它自己的答案 使用预先分配的数组 后续行动来自这个问题几年前 numpy 中有一个规范的 shift 函数吗 我没有看到任何东西文档 这是我正在寻找的简单版本 def shift xs n if n gt 0 return
  • 三元表达式中的 NullPointerException 为 null Long

    为什么下面这行代码会产生NullPointerException Long v 1 2 Long MAX VALUE Long null 据我所知 正在执行拆箱操作null 但为什么 注意 Long v Long null 不产生异常 因此
  • 在 Django 模型中使用 UUID 作为主键(通用关系影响)

    由于多种原因 我想在我的一些 Django 模型中使用 UUID 作为主键 如果我这样做 我仍然可以使用通过 ContentType 使用通用关系的外部应用程序 例如 contrib comments django voting 或 dja
  • CNN-LSTM 的批量归一化层

    假设我有一个这样的模型 这是时间序列预测的模型 ipt Input data shape 1 data shape 2 1 x Conv1D filters 10 kernel size 3 padding causal activatio
  • Azure Functions 应用程序在发布后为只读

    我有几个 Azure Functions 应用程序 c javascript 和 python 一段时间后它们都被随机设置为只读模式 奇怪的是 在这之前 这 3 个功能应用程序中只更新了其中一个 我知道这不一定是问题 但我希望能够从门户进行
  • 动态创建字段和方法

    我想为给定的类添加新字段 变量 和封装方法 例如 班级名称 Student 没有任何字段 如下所示 public class Student implements Serializable 然后在我的应用程序中创建一个实例 Student
  • HTML5 音频事件“进度”未触发

    我正在构建一个 a v html5 流媒体网络应用程序 这个问题涉及项目的音频部分 但我确信当我开始处理视频部分时我会遇到类似的情况 我的目标设备是 iPad 的 safari 浏览器 因此我必须这样做 html5 播放效果很好 但我有一个
  • 检查相交矩形的更快方法?

    除了我的 Rect 类 public class Rect public int x public int y public int w public int h public Rect int x int y int w int h th
  • 使用 JavaScript 正则表达式将数字 HTML 实体替换为其实际字符

    我正在尝试使用 JavaScript 和正则表达式将数字 HTML 实体替换为其实际的 Unicode 字符 例如 foo 39 s bar foo s bar 这是我到目前为止得到的 foo 39 s bar replace s g 1
  • 从 BaseAdapter 调用 notificationDataSetChanged 时 ListView 不会更新

    当底层数据发生变化时 我很难更新 ListActivity 我正在使用派生的 vom BaseAdapter 的自定义 列表 适配器 CustomListAdapter 来使用自定义列表元素 CustomListElement 填充 Lis
  • Erlang 是否总是在同一节点上的进程之间复制消息?

    演员消息传递语义的忠实实现意味着消息内容是从logical观点 即使对于不可变类型也是如此 消息内容的深度复制仍然是执行者模型实现的瓶颈 因此为了性能 某些实现支持零复制消息传递 尽管从程序员的角度来看它仍然是深度复制 是否实现了零拷贝消息
  • 如何等待网络流有数据可供读取?

    我的应用程序中有一个工作线程负责三件不同的事情 对其中两个作业的请求出现在我编写的队列中 当网络流上出现请求时 另一个作业就会被激活 我希望我的工作线程在没有工作要做时等待 这对于两个队列来说很容易 因为它们公开了一个 ManualRese