0

我创建了一个指向这样的对象的唯一指针:

std::unique_ptr<MyClass> myObj(new MyClass(arg1, arg2));

那里有一个方法,我需要在并行线程中执行。我不想等待它完成。它将运行一个 for 循环并等待某些东西并在自己的时间内完成。

我试着这样称呼它:

std::async(std::launch::async, &MyClass::MyMethod, myObj.get(), someArg, anotherArg);

也像这样:

std::async(std::launch::async, [&] {myObj->MyMethod(someArg, anotherArg); });

两个调用都成功并执行方法中的任何内容。但我没有得到任何并行性。无论我从哪里调用它,执行都会等待,并且在方法完成之前不会继续执行。在自己的线程中运行此方法而不等待它的好方法是什么?我应该使用一些特殊的编译器标志来实现这一点吗?我在 Ubuntu 上使用 GCC 4.8.1。

4

1 回答 1

2

问题在于std::futurestd::async. 由于任务没有被推迟,所以std::future对象被立即销毁。这会导致析构函数阻塞,直到线程执行完成。你需要抓住std::future对象`。

于 2014-04-19T00:09:56.727 回答