- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有手工制作的线程池。线程从完成端口读取并做一些其他事情。必须结束一个特定的线程。如果它卡在 GetQueuedCompletionStatus() 或 GetQueuedCompletionStatusEx() 上,如何中断它的等待?
ERROR_INVALID_HANDLE
。ERROR_NOT_FOUND
。WaitForMultipleObjects()
立即返回,就好像完成端口收到信号一样。 GetQueuedCompletionStatus()
显示未返回任何内容。我读了Overlapped I/O: How to wake a thread on a completion port event or a normal event?并在谷歌上搜索了很多。
可能,问题本身——结束线程的工作——是糟糕设计的标志,我的所有线程应该是平等的,并混合到正常的线程池中。在这种情况下,PostQueuedCompletionStatus() 方法应该起作用。 (尽管我怀疑这种方法是否美观简洁,尤其是当线程使用 GetQueuedCompletionStatusEx() 一次获取多个数据包时。)
最佳答案
如果您只是想减小线程池的大小,那么退出哪个线程并不重要。
但是,如果出于某种原因您需要向特定线程发出它需要退出的信号,而不是允许任何线程退出,您可以使用此方法。
如果您使用 GetQueuedCompletionStatusEx
,您可以通过为 fAlertable
传递 TRUE
来进行警报等待。然后,您可以使用 QueueUserAPC
将 APC 排队到要退出的线程。
如果线程正忙,那么您仍然需要等待当前工作项完成。
当然不要调用TerminateThread。
关于winapi - 如何强制 GetQueuedCompletionStatus() 立即返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32921513/
我正在编写一个服务器应用程序,我想使用 IOCompletion 端口,所以我为服务器编写了一个原型(prototype),但我遇到了 GetQueuedCompletionStatus 的问题,它永
IOCP 服务器使用 WebSocket 连接。当浏览器发送关闭帧时,服务器删除这个客户端,closesocket函数调用客户端的对象析构函数。但即使在套接字关闭后,GetQueuedCompleti
我编写了基于 iocp 机制管理网络通信的复杂库。问题是,当服务器通过调用 API 方法 closesocket() 关闭连接时,此信息有时会延迟几秒甚至几分钟传输到客户端。我用于检测连接关闭的代码如
我有一个通过串行端口生成消息的设备。当我重新启动设备时,IO 完成端口停止读取字节。 代码是调用 GetQueuedCompletionStatus(): BOOL bRet = GetQueuedC
我有手工制作的线程池。线程从完成端口读取并做一些其他事情。必须结束一个特定的线程。如果它卡在 GetQueuedCompletionStatus() 或 GetQueuedCompletionStat
GetQueuedCompletionStatus() 将完成通知从队列中取出,但它不会返回通知的类型(例如读取通知、写入通知)。 我有责任跟踪我发起的操作,例如,当我使用 WSARecv() 时,我
让我先概括一下。我通过三个端口接收数据。我有一个套接字、一个完成端口和一个工作线程。我调用 WSARecv,工作线程进程调用 GetQueuedCompletionStatus,然后是我的解析例程 R
我一直在测试将 IO 完成端口与线程池中的工作线程相结合,并偶然发现了一个我无法解释的行为。特别是,虽然下面的代码: int data; for (int i = 0; i (&data));
在程序终止期间,如何取消阻塞先前已通过调用 GetQueuedCompletionStatus() 阻塞的线程? 最佳答案 您可以使用 PostQueuedCompletionStatus API 调
我正在尝试将 GetQueuedCompletionStatus 与 Winsocks 一起使用,但我似乎无法正确执行。流程如下: void foo() { ... SOCKET sc
我正在尝试使用 Winsock 创建一个依赖于 IO 完成端口的 UDP 客户端/服务器类,但我无法让 GetQueuedCompletionStatus() 函数在新数据可用时返回。这可能是由于我的
正如它听起来的那样,我正在尝试异步 ReadDirectoryChangesW 和 IO 完成,但它不起作用,具体来说,GetLastError 重复返回 258 (GetQueuedCompleti
当调用 WSASend() 时,我必须向它传递一个 WSAOVERLAPPED 实例,并且我不能重新使用这个 WSAOVERLAPPED 实例,直到先前的 WSASend() 操作已经完成(即当一个完
有两个原因可以导致GetQueuedCompletionStatus()失败(返回FALSE),第一个是因为在调用时关闭了与其关联的完成端口句柄是突出的,如果 lpOverlapped 是 NULL,
背景:我正在使用 CreateIoCompletionPort、WSASend/Recv 和 GetQueuedCompletionStatus 在我的服务器上执行重叠套接字 io。对于流量控制,当发
切换到 Windows 8 后,我的应用程序停止工作。我花了几个小时调试问题,发现 IOCP 的行为在 Windows 8 和以前的版本之间有所不同。我提取了必要的代码来演示和重现问题。 SOCKET
我是一名优秀的程序员,十分优秀!