ブーストスレッドを数ナノ秒間スリープ状態にします。次のコードは、エラーなしでコンパイルするサンプルです。しかし、それは期待どおりに動作しないと私は理由を把握することはできません。数ナノ秒間ブーストスレッドをスリープ
#include <iostream>
#include <boost/thread.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time.hpp>
//Building options:
//-DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG -lboost_date_time-mt -lboost_thread-mt
void replay()
{
boost::posix_time::time_duration time1, time2;
time1=boost::posix_time::seconds(3);
std::cout << boost::posix_time::to_simple_string(time1) << std::endl;
boost::this_thread::sleep(time1);
time2=boost::posix_time::nanoseconds(987654321);
std::cout << boost::posix_time::to_simple_string(time2) << std::endl;
boost::this_thread::sleep(time2);
}
int main(int argc, char* argv[])
{
boost::thread replaythread(replay);
replaythread.join();
return 0;
}
BOOST_DATE_TIME_POSIX_TIME_STD_CONFIGは、ナノ秒(more info)で動作するために必要なプリプロセッサ定義です。この問題は、ビルドオプション-DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIGを設定した後に、boost :: this_thread :: sleepがposix :: time_durationで機能しないときに発生します。作成されたスレッドはすべてのCPUを使用し、スリープも残りの命令も処理しません。プリプロセッサ定義が削除されている場合、スレッドはboost :: posix_time :: nanosecondsを除いて、任意の期間スリープすることができます。 プログラムはtime_duration変数を使用してナノ秒を格納します。これにより、boost :: this_thread :: sleepが機能しなくなります。
は、関数の戻り値をチェックし、彼らがゼロに戻るまでそれを再度呼び出す必要がありますので、interuptedとき
あなたは動作しませんそれで何を意味するのですか?それは短くするか長くするか、全くしないか? nanosecsのstd :: cout行の出力は何ですか? – Nobody
あなたは正しいです。私はポストをより良い説明で編集しました。ありがとうございました。 – Emer
あなたはブーストのためにデバッグ情報とプログラムをリンクして、スリープ中に何が起こっているのか見てみましたか?私にとっては、それはスケジューラの限界をはるかに下回っているので、ナノ秒の間スリープする他の可能性がないので、忙しい待ち時間のように聞こえる。たぶん、何らかの理由で待っているループが戻ってこないかもしれない。 – Nobody