我正在寻找线程等待条件满足的方法。类似于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
}
答案 0 :(得分:0)
您需要某人通知您。
通常情况下,某人应该做任何能使你等待的条件成为现实的工作。对于网络I / O(例如示例中给出的那个),有人将成为操作系统:您在套接字上请求由操作系统执行的操作。完成该操作后,系统需要通知您的线程它可以继续。
正如Jerry Coffin在评论中所指出的那样,Boost.Asio为这种情况提供了一个强大的抽象,因此您不必自己动手制作特定于系统的API调用。