延迟功能调用

时间:2012-05-29 18:30:41

标签: c++ asynchronous c++11 function-calls delayed-execution

使用C ++ 11,lambdas和async执行延迟(因此也是异步)函数调用的最优雅方法是什么?建议命名:delayed_async。问的原因是我希望在给定时间(在这种情况下为一秒)之后关闭GUI警报灯而不会阻塞主(wxWidgets主循环)线程。我为此使用了wxWidgets'wxTimer,在这种情况下我发现wxTimer相当麻烦。因此,如果我改为使用C ++ 11的async 12 ,那么我很好奇这可以实现多么方便。我知道在使用async时我需要保护与互斥锁有关的资源。

1 个答案:

答案 0 :(得分:9)

你的意思是这样的吗?

#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;
}

请确保您没有通过lambda中的引用捕获变量。