【问题标题】:Boost thread wait for conditionBoost线程等待条件
【发布时间】:2013-09-24 13:21:34
【问题描述】:

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

        }

【问题讨论】:

  • 你看过Boost ASIO吗?至少对于你的例子来说,这似乎更合适。
  • 我认为您有两个选择,使用繁忙循环轮询变量或使用您不喜欢的通知方法推送它。

标签: c++ multithreading boost


【解决方案1】:

您需要有人通知您。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2017-07-02
    • 2013-05-30
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2011-10-10
    相关资源
    最近更新 更多