如何使用 C++11 在 Mac 上创建 async::thread?
Posted
技术标签:
【中文标题】如何使用 C++11 在 Mac 上创建 async::thread?【英文标题】:How to create a async::thread on Mac in C++11? 【发布时间】:2015-09-08 13:04:02 【问题描述】:是否可以在 c++ 程序上启动异步线程?
喜欢
std::async(function);
在 mac 上它对我不起作用,主程序等待返回。
我想从我的程序开始我的异步线程并通过关闭来停止它......没有任何同步或类似的东西。
我在 XCode 中使用 C++ 11。 如果你有我的解决方案,那就太好了。
非常感谢
【问题讨论】:
也许您想使用普通的std::thread
?
不,我需要一个异步线程,我无法同步线程,原因如下:在我的线程中是一个到 URL 的请求循环,要获取一个 json,如果我同步这个线程,我的程序有点滞后。
但是如果你创建一个线程是“异步”,它将独立于你的主线程运行。但是,在我看来,您想将std::async
与async
launch policy 一起使用,然后它将在后台运行,您可以随时获得结果。
【参考方案1】:
您应该通过传递std::launch::async 作为第一个参数来指定您希望线程异步运行。否则运行时系统可以选择推迟启动:
#include <future>
void function()
// do asynchronous stuff.
int main()
std::future<void> fut = std::async(std::launch::async, function);
// do other stuff
fut.get(); // synchronize threads
应该可以的。
【讨论】:
为什么不auto fut = ...
?
@NathanOliver 在这种情况下可能是为了清楚起见。
@NathanOliver 我会使用auto
,但在示例中会掩盖 OP 的 type。所以最好让它明确一点。
非常感谢!我只是 OSX 的初学者和新手。
@Galik 但类型不一定是std::future<void>
。 std::async()
在 C++ 14 中返回 std::future<std::result_of_t<std::decay_t<Function>(std::decay_t<Args>...)>>
以上是关于如何使用 C++11 在 Mac 上创建 async::thread?的主要内容,如果未能解决你的问题,请参考以下文章