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 に答える