不能在其他 class 中执行异步 运行 成员函数

Can't do async run member function in other class

我尝试异步到其他 class 中的成员函数,但不能。 这是我的代码中的概述

#include <iostream>
#include <thread>
#include <future>
#include <vector>

using namespace std;
class Work
{
public:
    void doWork(int A);
};

 void Work::doWork(int A)
{
    cout<<"I got "<<A<<endl;    
}   

class Worker
{
private:
    vector<int> work_list;
    Work* workset = NULL;
public:
    void Work_MP();
};
void Worker::Work_MP()
{
    vector<std::future<void>> v_async;
    v_async.reserve(8);
    for (size_t i = 0; i < 8; i++)
    {   
        Work* workset = new Work();
        v_async.emplace_back(std::async(std::launch::async, &Work::doWork, &workset, i));
    }   
}

int main ()
{
}

不过,我给出了其他 class 函数和实例的指针。没用。 是否缺少其他需要的声明?

我试图修复您的代码并提出了一个可以正常工作的版本。你那里有很多不必要的混乱。您的代码也会泄漏工作集指针。正如评论中指出的那样,主要错误是 &workset 它创建了一个“指向指针的引用”,您需要的只是指针本身。您应该完全避免普通指针。这是我想出的,希望对您有所帮助:

#include <vector>
#include <future>
#include <iostream>

class Work
{
public:
    void doWork(int A){
        std::cout << "I got " << A << std::endl;    
    }
};

class Worker
{
public:
    void Work_MP(){
        std::vector< std::future<void> > v_async;
        v_async.reserve( 8 );
        for( size_t i = 0; i < 8; ++i ){   
            std::shared_ptr<Work> workset = std::make_shared<Work>();
            v_async.emplace_back( std::async( std::launch::async, &Work::doWork, workset, i ) );
        }  
    }
};

int main ()
{
    Worker worker;
    worker.Work_MP();
    return 0;
}

如您所见,为了简洁起见,我内联了函数定义。将普通指针转换为共享指针并删除未使用的变量。

在此处查看实际效果:https://onlinegdb.com/vFQo8R1rA