私は C++ でサービスを作成していますが、一定時間スリープする必要があるスレッドがいくつかあります。
これまでのところうまくboost::this_thread::sleep_for
機能していますが、中断が必要です (信号の停止など)。Boost には がありませんcancellation_token
。これまでのところ、次のようなものがあります。
boost::mutex _waiting_mutex;
boost::condition_variable _waiting_cv;
void wait(const boost::chrono::duration& timeout)
{
boost::unique_lock<boost::mutex> lk(_waiting_mutex);
_waiting_cv.wait_for(lk, timeout);
}
void signal_termination()
{
_waiting_cv.notify_all();
}
これは、1 つのスレッド (5 秒間、またはsignal_termination()
が呼び出されるまでスリープする) ではうまく機能しますが、複数のスレッドではうまく機能しません。
このunique_lockを克服するには? 最大スレッド数のセマフォを導入する必要がありますか?
C# では、ManualResetEvent
.