从套接字选择中断

kam*_*iro 9 c c++ sockets

我有一个循环,基本上每隔几秒(超时后)调用它:

 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
 }
Run Code Online (Sandbox Code Playgroud)

因此,基本上每隔几秒(由tv指定),它会重新激活监听.

这是在线程B(不是主线程)上运行的.有时我想从线程A(主线程)立即结束这个接受器循环,但似乎我必须等到时间间隔结束.

有没有办法从另一个线程中断选择函数,以便线程B可以立即退出?

Ign*_*ams 11

最简单的方法可能是使用pipe(2)创建管道并添加读取结束readfds.当另一个线程想要中断select()只是向它写一个字节时,然后消耗它.

  • 它在等待*a*文件.它不关心*哪个*,它只是想*某事*. (2认同)