作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我将编写一个程序,同时处理来自 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/
我是一名优秀的程序员,十分优秀!