我有一個循環,我想確保它運行每個循環(大約)固定的時間量。替代std :: this_thread :: sleep_for()
我使用sleep_for
來實現這種行爲,但我也希望程序能夠在不包含標準線程庫完全支持的環境下編譯。現在,我有這樣的事情:
using namespace std;
using namespace std::chrono;
//
while(!quit)
{
steady_clock::time_point then = steady_clock::now();
//...do loop stuff
steady_clock::time_point now = steady_clock::now();
#ifdef NOTHREADS
// version for systems without thread support
while(duration_cast<microseconds>(now - then).count() < 10000)
{
now = steady_clock::now();
}
#else
this_thread::sleep_for(microseconds{ 10000 - duration_cast<microseconds>(now - then).count() });
#endif
}
雖然這允許程序在不支持標準的線程環境中編譯,它也非常CPU密集型的程序檢查持續的時間條件,而不是等待直到它是真實的。
我的問題是:在沒有完全支持線程的環境中,是否有一種使用標準C++(即不增強)啓用此「等待」行爲的資源密集型方法?
不是我所知道的,除非你使用'sleep_until'。 – chris
這將是艱難的。如果你可以使用boost,那麼有很多定時的回調函數可以讓你輕鬆做到這一點。看到[這裏](http://stackoverflow.com/questions/4363458/timer-callback-in-c) –
我曾經使用'select'在一個空的fdset上 –