使用 C++11、lambdas 和 async 执行延迟(因此也是异步)函数调用的最优雅方式是什么?建议命名:delayed_async
. 询问的原因是我希望在给定时间(在本例中为一秒)后关闭 GUI 警报灯,当然不会阻塞主(wxWidgets 主循环)线程。我wxTimer
为此使用了 wxWidgets',我发现wxTimer
在这种情况下使用起来相当麻烦。async
所以这让我很好奇,如果我改用 C++11 的1、2 ,这可以实现多方便。我知道在使用async
.
问问题
9846 次
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;
}
只需确保您没有在 lambda 中通过引用捕获变量。
于 2012-05-29T20:12:03.513 回答