提升线程等待条件

时间:2013-09-24 13:21:35

标签: c++ multithreading boost

我正在寻找线程等待条件满足的方法。类似于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

        }

1 个答案:

答案 0 :(得分:0)

您需要某人通知您。

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

正如Jerry Coffin在评论中所指出的那样,Boost.Asio为这种情况提供了一个强大的抽象,因此您不必自己动手制作特定于系统的API调用。