问题标签 [cancelio]
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.
windows - CancelIo() 对已经读取的字节做了什么?
如果我ReadFile()
10 个字节(在没有超时的重叠模式下)但CancelIo()
在读取 5 个字节后调用会发生什么?的文档CancelIo()
说它取消了任何挂起的 I/O,但是已经读取的 5 个字节会发生什么?他们迷路了吗?他们是否重新排队,所以下次ReadFile()
我会再次获得他们?
我正在寻找说明一种或另一种方式的规范。我不想依赖经验证据。
windows - 如何找出 CancelIo() 何时完成?
CancelIo()应该取消与调用线程相关的所有挂起的 I/O 操作。根据我的经验,CancelIo() 有时也会取消未来的I/O 操作。鉴于:
CancelIo(port)
如果我在读取之前立即调用,GetQueuedCompletionStatus()
将永远阻塞,永远不会收到读取操作。CancelIo(port)
如果我在读取后立即调用,GetQueuedCompletionStatus()
将返回 0GetLastError()==ERROR_OPERATION_ABORTED
- 如果我调用
CancelIo(port)
并且没有挂起或后续读取,GetQueuedCompletionStatus()
将永远阻塞。
这里的关键点是无法检测何时CancelIo()
完成执行。如何确保CancelIo()
已完成执行并且发出进一步的读取请求是安全的?
PS:查看http://osdir.com/ml/lib.boost.asio.user/2008-02/msg00074.html和http://www.boost.org/doc/libs/1_44_0/doc/html/ boost_asio/using.html听起来 CancelIo() 并不是真的可用。必须客户需要 Windows XP 支持。我有哪些选择?
注意:我正在从串行端口读取。
winapi - 如果 CancelIo 失败怎么办?
调用的原因有很多CancelIo
,但在我的特殊情况下,我调用它是为了知道系统不再写入缓冲区。一旦知道这一点,我就可以安全地释放缓冲区。
但是如果CancelIo
失败了怎么办?我现在要做的是显式泄漏缓冲区并抛出异常。有没有更好的方法来处理这个问题?
PS 对 Europa、Ganymede 和 Callisto 的类似调用似乎不见了。我应该提交错误吗?
c# - 为什么 CancelIo 函数失败?
我写了下面的代码。我正在调用此方法以使用三个单独的线程写入三个不同的硬盘。CancelIo 调用之一失败(返回 false)。
我假设磁盘没问题(硬件没问题)。
怎么会这样?
(更换磁盘后,我看到它在另一个磁盘上再次发生。)
visual-c++ - win32 api 中缺少函数 CancelIO() 和 GetOverlappedResult()
我找不到函数 CancelIo 和 GetOverlappedResult
函数 CancelIO 描述为 CancelIO 函数取消调用线程为指定文件句柄发出的所有挂起的输入和输出 (I/O) 操作。该函数不会取消其他线程为文件句柄发出的 I/O 操作。
函数 GetOverlappedResult 被描述为检索对指定文件、命名管道或通信设备的重叠操作的结果。指定超时间隔或等待可警报线程。
它们没有在 windows.h 中定义。我在哪里可以找到它们的头文件?还是有等效功能可以代替它们?
c++ - CancelIoEx : 函数指针 typedef
以下代码是从 MS Async Filter 复制而来的。假设以下代码正在调用 CancelIo 或 CancelIoEx。无论如何,我看不到在哪里调用 CancelIoEx。假设 typedef 代表 CancelIoEx 但从未被调用。这条线到底在bResult = (pfnCancelIoEx)(m_hFile, NULL);
做什么?