如何异步执行C ++函数而不是阻塞/等待?

时间:2014-05-27 12:28:34

标签: c++ stl

我想异步执行一个函数而不是等待它完成。我最初认为我可以使用std :: async和launch :: async,但返回的future的析构函数会阻塞,直到函数完成。

有没有办法在没有阻塞的情况下使用stl在线程池上运行函数?

3 个答案:

答案 0 :(得分:1)

你应该生成一个等待计数信号量的新线程。当它被唤醒(解除阻塞)时,它将发送一个RPC请求并递减计数器。当用户单击该按钮时,递增计数器。同一个线程可以在整个程序的整个生命周期内为所有请求提供服务。

答案 1 :(得分:0)

这个提案谈到了遗嘱执行人......看起来我希望我发现它已经存在了,但它看起来并没有。

http://isocpp.org/files/papers/n4039.html

答案 2 :(得分:0)

您正在寻找std :: thread :: detach。 http://en.cppreference.com/w/cpp/thread/thread/detach

您可以创建一个线程,然后从中分离。此时,您可以删除线程句柄,线程将在没有您的情况下运行。

顺便说一句,它通常被认为是使用这种技术的不良形式。一般来说,你应该关心线程的状态,并且应该尝试在程序结束时优雅地关闭它,但实际上,当你真的不关心时,这是一个有用的技巧。