gpt4 book ai didi

c++ - 有没有办法在信号量或输入事件发生之前阻塞单个线程?

转载 作者:可可西里 更新时间:2023-11-01 11:07:19 29 4
gpt4 key购买 nike

我将编写一个程序,同时处理来自 TCP/IP 连接和共享内存队列的请求。这意味着程序将阻塞,直到队列中有请求或套接字上有输入。然后它将处理请求并继续。有没有办法在单个线程中执行此操作?我的意思是某种 select 同时使用信号量和套接字。延迟对我来说很重要,我也不想忙等待。该程序将在 Windows 上运行。谢谢。

最佳答案

一种方法是使用重叠 I/O 并使用 hEvent 机制来指示 I/O 完成。然后,您可以使用 WaitForMultipleObjects() API 等待队列信号量和 hEvent/s。

另一种方法是使用重叠 I/O 和完成例程。然后,您可以在 WaitForSingleObectEx() API 的循环中等待信号量,并将 bAlertable 参数设置为 true,以便线程可以处理排队的完成例程,例如:

while(WAIT_IO_COMPLETION!=WaitForSingleObjectEx(queueSema,INFINITE,true)){
[deque object and handle it];
};

这两种方案都允许您设置超时以轮询服务器以保持连接打开和/或检查它是否已关闭。

关于c++ - 有没有办法在信号量或输入事件发生之前阻塞单个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26116246/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com