web-dev-qa-db-ja.com

C ++ Boostスレッドをスリープさせる方法

Boost :: threadを使用してスレッドをスリープさせることは不可能のようです。メソッドsleepにはsystem_timeが必要ですが、どのように構築できますか?

ライブラリの中を見るのはあまり役に立ちません...

基本的には、このスレッドにエントリポイントとして渡す関数内にスレッドがあり、次のようなものを呼び出したい

 boost::this_thread::sleep

または何か、これを行う方法?

ありがとうございました

35
Andry

Boostのバージョンに応じて:

どちらか...

#include <boost/chrono.hpp>
#include <boost/thread/thread.hpp> 

boost::this_thread::sleep_for(boost::chrono::milliseconds(100));

または...

#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread/thread.hpp> 

boost::this_thread::sleep(boost::posix_time::milliseconds(100));

また、マイクロ秒、秒、分、時間、その他のいくつかを使用することもできますが、わかりません。

87

別の投稿から、boost::this_thread::sleepがBoost v1.5.3で非推奨になったことを学びました: http://www.boost.org/doc/libs/1_53_0/doc/html/thread/thread_management.html =

代わりに、試してください

void sleep_for(const chrono::duration<Rep, Period>& rel_time);

例えば.

boost::this_thread::sleep_for(boost::chrono::seconds(60));

または多分試す

void sleep_until(const chrono::time_point<Clock, Duration>& abs_time);

非推奨のsleep関数でBoost v1.53を使用していましたが、プログラムが非周期的にクラッシュしました。 sleep関数の呼び出しをsleep_for関数の呼び出しに変更すると、プログラムのクラッシュが停止しました。

22
user3731622

第一に

boost::posix_time::seconds secTime(1);  
boost::this_thread::sleep(secTime); 

第二に

boost::this_thread::sleep(boost::posix_time::milliseconds(100));
4
user2749562

少なくともMS Visual Studio(2013年と2015年に試した)の間に大きな違いがあるという難しい方法を学びました

boost::this_thread::sleep(boost::posix_time::microseconds(SmallIterval));

そして

boost::this_thread::sleep_for(boost::chrono::microseconds(SmallIterval));
or
std::this_thread::sleep_for(std::chrono::microseconds(SmallIterval));

間隔がかなり大きなしきい値よりも小さい場合(15000マイクロ秒= 15ミリ秒のしきい値を見ました)。

SmallItervalが小さい場合、sleep()は瞬時に中断します。 sleep(100 mks)は、sleep(0 mks)として動作します。

ただし、しきい値より小さい時間間隔のsleep_for()は、しきい値全体で一時停止します。 sleep_for(100 mks)は、sleep_for(15000 mks)として動作します。

しきい値より大きい間隔と値0の動作は同じです。

0
Lenny