3

C++ 11、ラムダ、および非同期を使用して、遅延 (したがって非同期も) 関数呼び出しを実行する最もエレガントな方法は何ですか? 推奨される命名: delayed_async. 質問する理由は、もちろんメイン (wxWidgets メイン ループ) スレッドをブロックすることなく、特定の時間 (この場合は 1 秒) 後に GUI アラート ライトをオフにしたいからです。これには wxWidgetswxTimerwxTimer使用しましたが、この場合の使用はかなり面倒です。asyncそのため、代わりに C++11 の12を使用すると、これをどれだけ便利に実装できるかについて興味を持ちました。を使用する場合、ミューテックスに関連するリソースを保護する必要があることを認識していasyncます。

4

1 に答える 1

12

このようなことを意味しますか?

#include <iostream>
#include <chrono>
#include <thread>
#include <future>

int main()
{
    // Use async to launch a function (lambda) in parallel
    std::async(std::launch::async, [] () {
        // Use sleep_for to wait specified time (or sleep_until).
        std::this_thread::sleep_for( std::chrono::seconds{1});
        // Do whatever you want.
        std::cout << "Lights out!" << std::endl;
    } );
    std::this_thread::sleep_for( std::chrono::seconds{2});
    std::cout << "Finished" << std::endl;
}

ラムダで参照によって変数をキャプチャしないようにしてください。

于 2012-05-29T20:12:03.513 に答える