c++ - Boost线程等待条件

标签 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

        }

最佳答案

您需要通知您。

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

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

关于c++ - Boost线程等待条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18982843/

相关文章:

c# - 多线程计算从多个文件加载数据。如何在 C# 中使用和同步 StreamReader?

ruby - 是什么导致我的 Ruby `trap` block 出现这种死锁?

c++ - Boost.Asio - 不执行所有处理程序

c++ - 以下语句是函数重载还是函数偏特化?

以 C++ 与 D 为例。 D主页的前端程序RPN计算器对比

c++ - C++为什么我在int和str.length()之间进行的比较不起作用?

c - 如何并行斐波那契数列直到 10^5 项

c++ - 如何在 std::map 中使用 boost::mutex 作为映射类型?

c++ - 在 cpp 中重载 << 运算符时出错?不知道为什么?

c++ - 为什么 C++ 方法不应该返回取消引用的指针?