1

我正在寻找一种让线程等到满足条件的方法。类似于 boost::condition_variable 的东西。但不是让另一个线程通知当前线程,我希望当前线程在条件满足时唤醒。

我现在拥有的:有没有更好的方法来做到这一点?

       int i = 100;//keep connection alive for 500*100 ms (roughly 1 minute)
       while (!tcp_socket.available() && (i != 0)) 
       {
            if(!tcp_socket.isOpen())
            {
                  break;
            }
            i--;
            boost::this_thread::sleep(boost::posix_time::milliseconds(500));
        }
        if (tcp_socket.available())//data available to read?
        {
           //read data do stuff

        }
4

1 回答 1

0

您需要有人通知您。

通常情况下,任何人都应该是做使您等待的条件成为现实的工作的人。在网络 I/O 的情况下,例如您的示例中给出的那个,某人将是操作系统:您请求对由操作系统执行的套接字进行操作。一旦该操作完成,系统需要通知您的线程它可以继续。

正如 Jerry Coffin 在评论中指出的那样,Boost.Asio为这种场景提供了强大的抽象,因此您不必自己摆弄系统特定的 API 调用。

于 2013-09-24T13:52:53.980 回答