特定の時間枠内にデータ リソースがアクセスされたかどうかをチェックし、そうでない場合は接続をクリアする単純なポーリング スレッド ( Boost 1.39.0 を使用) を開発しました。関連するコードは以下で確認できます。
私の懸念は 2 つあります。
1) スレッドを安全に閉じるために、スリープ中に割り込みを使用することは適切ですか? 割り込みはスリープが終了するのを待ちますか、それともすぐに割り込みますか? while ループをエスケープするためだけに、thread_interrupted 例外をキャッチしていることがわかります。
2) ほとんどの時間を眠っているスレッドを使用するのは無駄ですか? 標準 C++ で単純なポーリング メカニズムを実装するためのより良いパターンはありますか?
boost::xtime xt;
while (1) {
try {
boost::xtime_get(&xt, boost::TIME_UTC);
xt.sec += _sleep_secs;
boost::thread::sleep(xt);
//
// logic to check resource access
// etc.
}
catch(boost::thread_interrupted const&) {
return;
}
}