ポーリングを行う C++ メソッドにタイムアウトを実装しようとしています。現在、メソッドは次のようになっています (タイムアウトなし)。
do {
do_something();
usleep(50);
} while(!is_finished());
ソリューションには、次のプロパティが必要です。
- システム時間の変更に耐えなければならない
- ミリ秒単位のタイムアウト (多少のジッターは許容可能)
- POSIX互換
- シグナルを使用しないでください (ライブラリの一部であり、副作用を回避します)
- ブーストを使用する可能性があります
私は現在clock()
、このようなことを使用して行うことを考えています:
start = clock();
do {
do_something();
usleep(50); // TODO: do fancy stuff to avoid waiting after the timeout is reached
if(clock() - start > timeout * CLOCKS_PER_SEC / 1000) break;
} while(!is_finished());
これは良い解決策ですか?この種のタスクは頻繁に発生するように思われるため、可能な限り最善の解決策を見つけようとしています。
この種の問題のベストプラクティスと考えられるものは何ですか?
前もって感謝します!