C ++ 11“正确”的延迟执行方式

时间:2012-12-31 23:45:06

标签: c++ c++11 scheduler

这是在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();
}

产生一个新线程并进行睡眠()似乎过重了?

1 个答案:

答案 0 :(得分:3)

理想情况下,如果作业相当短,您应该使用基于事件的系统,您可以在其中插入具有特定时间延迟的作业,然后在此之后执行。实际上不需要线程,你可以在主线程中做所有事情。

你的主循环看起来有点像这样:

int main() {
    setup();

    while (true) {
        handleEvents();
        doYourOwnStuff();
        usleep(nextEvent.firingTime - currentTime); // Wait until the next event is triggered
    }
}

当然,如果你已经拥有一个系统,这样的系统就不容易实现。许多流行的UI框架(Cocoa,Qt,Windows)都支持这种设计,因为它非常强大和简单。