如何解决无法在其他类中执行异步运行成员函数
我尝试异步到其他类中的成员函数,但不能。 这是我的代码中的概述
#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 ()
{
}
虽然,我给出了关于其他类函数和实例的指针。没有用。 是否缺少其他需要的语句?
解决方法
我尝试修复您的代码并提出了一个有效的版本。你那里有很多不必要的混乱。此外,您的代码将泄漏工作集指针。正如评论中指出的,主要错误是 &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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。