1

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

生成一个新线程并执行 sleep() 似乎过于繁重?

4

1 回答 1

3

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

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

int main() {
    setup();

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

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

于 2012-12-31T23:49:59.347 回答