我创建了一个指向对象的唯一指针:
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。
答案 0 :(得分:2)
问题在于std::future
返回的std::async
。由于任务未延期,std::future
对象正在被立即销毁。这会导致析构函数阻塞,直到线程执行完成。你需要抓住std::future
对象。