ソケットからデータを受信して処理する無限ループを持つスレッドがあります。データがソケットで読み取り可能になるか、「exit」ブール変数が true (別のスレッドによって設定される) になるまで、そのスレッドをブロック (スリープ) したい。サードパーティのライブラリをポーリングして使用せずに移植可能な方法でそれを行うことは可能ですか (当然のことながらソケット ライブラリを除く)。移植可能な方法で行うことができない場合、Windows で行う最善の方法は何でしょうか (まだポーリングとサードパーティのライブラリはありません)。
コード例:
bool exit = false; // or "std::atomic<bool> exit" or anything else
void fn()
{
SOCKET s;
// init socket, establish connection, etc
for(;;)
{
// This thread goes to wait (blocks) until data becomes available on socket
// OR exit var is set to true (by a different thread) - how?
if(exit) break;
// receive and process data from socket
}
}