我正在寻找一种让线程等待条件满足的方法。类似于 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
}
最佳答案
您需要人通知您。
通常,某人应该是从事使您等待的条件变为现实的工作的人。在网络 I/O 的情况下,例如您示例中给出的网络 I/O,操作系统将是某人:您请求在操作系统执行的套接字上执行操作。一旦该操作完成,系统需要通知您的线程它可以继续。
正如 Jerry Coffin 在评论中指出的那样,Boost.Asio为这种情况提供了强大的抽象,因此您不必自己摆弄系统特定的 API 调用。
关于c++ - Boost线程等待条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18982843/