如何使用 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::asyncasync 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&lt;void&gt;std::async() 在 C++ 14 中返回 std::future&lt;std::result_of_t&lt;std::decay_t&lt;Function&gt;(std::decay_t&lt;Args&gt;...)&gt;&gt;

以上是关于如何使用 C++11 在 Mac 上创建 async::thread?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac 终端中使用 C++11 支持编译 C++

分段错误:在 Mac 上为 11,但在 Linux 上没有,同时在 C 中创建数组

如何在 Mac OS X 上使用 C++ 播放声音?

c_cpp cpp_asyn_callback.cpp

C++ Singleton 无法在 Mac OS 上链接

C/C++ Linux,如何在不使用 IP 的情况下在网络上查找邻居(仅限 MAC)