【发布时间】:2011-01-30 00:18:36
【问题描述】:
我有一个循环,基本上每隔几秒调用一次(超时后):
while(true){
if(finished)
return;
switch(select(FD_SETSIZE, &readfds, 0, 0, &tv)){
case SOCKET_ERROR : report bad stuff etc; return;
default : break;
}
// do stuff with the incoming connection
}
所以基本上每隔几秒钟(由 tv 指定),它就会重新激活监听。
这是在线程 B(不是主线程)上运行的。有时我想立即从线程 A(主线程)结束此接受器循环,但似乎我必须等到时间间隔结束..
有没有办法从另一个线程中断 select 函数,以便线程 B 可以立即退出?
【问题讨论】:
-
旁注:你可以剪掉 if 语句,只写 while(!finished)。
-
这将占用 100% 的 CPU 时间。绝对不能接受。
-
哎呀,我一定是看错了
-
Write on Windows :) 您有几个选项可以异步执行套接字 I/O。例如,您可以将套接字与可等待事件 (WSAEventSelect) 相关联,然后等待这些事件,也可以选择您的自定义事件,以及您需要的超时时间