这是在C ++ 11中执行延迟执行的“干净”方法吗?或者是否有“更清洁”的方式?
#include <iostream>
#include <boost/thread.hpp>
int main(int argc, char* argv[]) {
boost::thread t([] () { boost::this_thread::sleep(boost::posix_time::milliseconds(1000)); std::cout << "rawr!" << std::endl; } );
t.join();
}
产生一个新线程并进行睡眠()似乎过重了?
答案 0 :(得分:3)
理想情况下,如果作业相当短,您应该使用基于事件的系统,您可以在其中插入具有特定时间延迟的作业,然后在此之后执行。实际上不需要线程,你可以在主线程中做所有事情。
你的主循环看起来有点像这样:
int main() {
setup();
while (true) {
handleEvents();
doYourOwnStuff();
usleep(nextEvent.firingTime - currentTime); // Wait until the next event is triggered
}
}
当然,如果你已经拥有一个系统,这样的系统就不容易实现。许多流行的UI框架(Cocoa,Qt,Windows)都支持这种设计,因为它非常强大和简单。