问题标签 [overlapped-io]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2416 浏览

windows - ConnectEx 要求套接字“初始绑定”,但绑定到什么?

ConnectEx函数需要一个“未连接的、先前绑定的套接字”。实际上,如果我在示例中省略了绑定步骤(见下文),ConnectEx将失败并显示 WSAEINVAL

这是我目前的理解:在调用ConnectEx之前,将套接字绑定INADDR_ANY端口 0(除非它已经绑定):

或者对于 IPv6 套接字:

这让操作系统可以为我们的套接字分配一个本地地址(而不是我们要连接 的远程地址)。connect会自动执行此步骤,但ConnectEx不会。

我的问题是:

  1. 我的评估是否正确?

  2. 有没有办法进行这种与地址系列无关的自动绑定,还是我必须手动处理每个、、、AF_INETAF_INET6蓝牙AF_BTH)等?

工作 ConnectEx 示例(也在 Gist 上:https ://gist.github.com/4158972 ):

0 投票
1 回答
318 浏览

c++ - wxWidgets 应用程序中的重叠 IO

我正在开发一个仅限 Windows 的wxWidgets GUI 应用程序,该应用程序应通过命名管道从服务进程接收异步通知。我想避免为管道句柄监视生成单独的线程。因此,我正在考虑使用重叠 IO。我的问题是:在主线程中接收管道句柄通知的最直接方式是什么?

0 投票
1 回答
1060 浏览

windows - 如何获取从挂起或中止的重叠 ReadFile 操作中读取的字节数

可以使用该GetOverlappedResult()函数从成功的重叠(异步)ReadFile()操作中获取读取字节数。

在操作仍在挂起或中止之后,我找不到获取读取字节数的方法。在这两种情况下,该GetOverlappedResult()函数似乎都将读取字节数设置为 0。知道怎么做吗?

编辑:执行此异步 I/O 操作以通过 COM 端口检索来自嵌入式设备的数据。该操作在超时后中止。我需要在操作被中止之前接收到的字节数仅用于调试目的。

0 投票
1 回答
1105 浏览

c++ - 异步 I/O 回调方法并发

我已经用我担心并发的回调实现了异步 I/O。我向你提出异议,因为我总是使用同一个文件,并且操作系统文件物理I/O 基本上是同步操作,所以我的回调方法中不需要锁定机制 - 但我很可能在这里错了- 输入 SO :o) 我有一个缓冲区管理器,当读取操作完成时,它会将读取的数据放入其缓冲区缓存中,并且有一个基于 EOverlappedStates 枚举状态的每个重叠操作的状态引擎;“I/O 未启动”、“成功”和“错误”。你认为我需要锁定回调方法来确保像我们这样的多线程程序的并发性吗?

打开文件:

读取文件:

扩展重叠结构:

回调方法:

用法:

0 投票
0 回答
293 浏览

task-parallel-library - NativeOverlapped 或 System.Threading.Overlapped 在 PFX IOTaskScheduler 中的哪些场景有用?

我正在查看 PFX 团队的Parallel Extensions Extras DLL并看到一个使用NativeOverlapped和 System.Threading.Overlapped 方法的 IOTaskScheduler。

由于没有太多关于每个扩展何时有用的文档,因此由我来阅读源代码并确定何时应该使用给定的功能。

我什么时候使用 IOTaskScheduler 或 NativeOverlapped 功能?

(直接链接到源代码) (本页底部的文档)

0 投票
2 回答
1847 浏览

winapi - 重叠的 IO 或文件映射?

在 Windows 应用程序中,我有一个包含文件名和缓冲区的类。您使用文件名构造它,您可以查询对象以查看缓冲区是否已填充,如果没有则返回 nullptr,如果是则返回缓冲区地址。当对象超出范围时,释放缓冲区:

我想将数据异步放入内存,据我所知,我有两个选择:要么创建缓冲区并通过 ReadFileEx 使用重叠 IO,要么使用 MapViewOfFile 并在另一个线程上触摸地址。

目前我正在使用 ReadFileEx 这会出现一些问题,因为大于约 16MB 的请求很容易失败:我可以尝试拆分请求,但随后会出现同步问题,并且如果对象在 IO 之前超出范围完成我有缓冲区清理问题。此外,如果类的多个实例被快速连续创建,事情会变得非常复杂。

在另一个线程上映射和触摸数据似乎要容易得多,因为我不会遇到上限问题:如果客户端现在绝对必须拥有数据,他们可以简单地取消引用地址,让操作系统担心页面错误并接受阻塞命中。

这个应用程序需要支持单核机器,所以我的问题是:另一个软件线程上的页面错误会比当前线程上的重叠 IO 更昂贵吗?他们会拖延这个过程吗?重叠的 IO 是否会以相同的方式停止进程,还是有一些我不明白的操作系统魔法?是否仍然使用重叠 IO 执行页面错误?

我已经很好地阅读了这些主题: http: //msdn.microsoft.com/en-us/library/aa365199 (v=vs.85).aspx(文件管理中的 IO 概念) http://msdn。 microsoft.com/en-us/library/windows/desktop/aa366556(v=vs.85).aspx(文件映射),但我似乎无法推断如何进行性能权衡。

0 投票
2 回答
750 浏览

c - 为什么给 ReadFileEx() 的回调没有收到正确的 OVERLAPPED 结构?

出于某种原因,我的回调OVERLAPPED在调用ReadFileEx. 什么会导致这种情况?

更新——例如:

0 投票
1 回答
271 浏览

c - 为什么 GetOverlappedResult 需要文件句柄?

为什么GetOverlappedResult需要文件句柄?

等待事件似乎WaitForSingleObject(overlapped->hEvent)就足够了,这样重叠的 I/O 就完成了,那么GetOverlappedResult文件句柄有什么用呢?

0 投票
1 回答
60 浏览

windows - 套接字异步操作会同步完成吗?

根据http://support.microsoft.com/kb/156932,在某些情况下异步磁盘 IO 操作可能会同步完成。这仅适用于磁盘 IO 还是类似的条件适用于网络 IO?

更新:我现在已经用调试器对此进行了测试,并验证了 1)如果接收缓冲区中有数据,则操作将同步完成 2)IOCP 无论如何都会触发回调。

0 投票
2 回答
7275 浏览

c++ - 在 Windows 上使用重叠命名管道进行同时读写

我有一个创建为重叠的管道句柄。我需要并行读取和写入数据。我怎样才能做到这一点?

Named Pipe Server Using Overlapped I/O文档页面显示了如何读取和写入多个管道的示例,但“它避免了对单个管道实例的同时操作”。

在 Windows 上用 C++ 执行此操作的正确方法是什么?我无法提交正确的示例,也无法提供有关该主题的帮助。

当没有数据要读取并且最终我无法使用 WriteFile 写入时,我面临的主要问题是正常的 ReadFile 阻塞。我还没有找到任何方法可以告诉我是否有可以阅读的内容不会阻塞。据我了解,我需要传递 OVERLAPPED 结构,但不知道如何在并行读写一个管道(不是很多)的情况下使用它。

正如Synchronous and Overlapped Pipe I/O中所说,这应该是可能的:

重叠操作使一个管道可以同时读取和写入数据,并且单个线程可以在多个管道句柄上同时执行 I/O 操作。