我有一个循环,我想确保它运行每个循环(大约)固定的时间量。替代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上 –