gpt4 book ai didi

c++ - 从类内部线程化成员函数

转载 作者:行者123 更新时间:2023-11-28 02:07:38 24 4
gpt4 key购买 nike

我正在尝试创建一个多线程初始化例程,该例程将根据支持的并发线程数来分配任务。是调用另一个成员函数的构造函数,但是不管我怎么格式化,好像都不能把另一个成员函数当成线程函数来调用。那么我将如何从类内部正确地线程化带有参数的成员函数呢?

在它被询问之前,我没有使用“using namespace std;”,而是使用“using std::vector;”和其他需要的。

Universe::Universe(const unsigned __int16 & NumberOfStars, const UniverseType & Type, const UniverseAge & Age)
{
thread *t = new thread[concurentThreadsSupported-1];
for (unsigned __int32 i = concurentThreadsSupported - 1; i > 0; i--)
{
//problem line
t[i] = thread(&Universe::System_Spawner, i, NumberOfStars / concurentThreadsSupported, Type, Age);
}
for (int i = concurentThreadsSupported - 1; i > 0; i--)
{
t[i].join();
cout << "Thread joined" << endl;
}
delete[] t;
}

void Universe::System_Spawner(const unsigned __int16 threadNumber,
const unsigned __int16 NumberOfStars, const UniverseType & Type, const UniverseAge & Age)
{
cout << "Inside Thread" << endl;
}

我得到的错误是

c:\program files (x86)\microsoft visual studio 14.0\vc\include\thr\xthread(238): error C2672: 'std::invoke': 找不到匹配的重载函数

...

c:\program files (x86)\microsoft visual studio 14.0\vc\include\thr\xthread(238): error C2893: 无法专门化函数模板 'unknown-type std::invoke(_Callable &&,_Types && ...)'

c:\program files (x86)\microsoft visual studio 14.0\vc\include\thr\xthread(238): 注意:使用以下模板参数:

c:\program files (x86)\microsoft visual studio 14.0\vc\include\thr\xthread(238): 注意:'_Callable=void (__cdecl Universe::* )(unsigned short,unsigned short,const UniverseType &,const UniverseAge &)'

c:\program files (x86)\microsoft visual studio 14.0\vc\include\thr\xthread(238): 注意:'_Types={unsigned int, unsigned int, UniverseType, UniverseAge}'

最佳答案

类的所有成员函数都将 this 作为隐式第一个参数。通常在调用成员函数时,编译器会为您处理,但在创建 std::thread 的新实例时,您必须自己执行此操作:

t[i] = thread(&Universe::System_Spawner, this, i, NumberOfStars / concurentThreadsSupported, Type, Age);

关于c++ - 从类内部线程化成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36893486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com