1

条件が満たされるまでスレッドを待機させる方法を探しています。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

        }
4

1 に答える 1

0

通知するが必要になります。

通常、その誰かは、あなたが待っている条件を真にする作業を行う人でなければなりません。例で示したようなネットワーク I/O の場合、その誰かがオペレーティング システムになります。オペレーティング システムによって実行されるソケットに対する操作を要求します。その操作が完了すると、システムはスレッドが続行できることを通知する必要があります。

コメントで Jerry Coffin が指摘したように、Boost.Asioはこのシナリオに強力な抽象化を提供するため、システム固有の API 呼び出しを自分でいじる必要はありません。

于 2013-09-24T13:52:53.980 に答える