所以,我一直在努力弄清楚c++多线程是如何工作的,以及如何将它应用到我正在从事的项目中。我正在尝试完成创建一个新线程并在该线程上运行一个函数。我尝试运行的函数称为 SetupInfo
并将 Individual
作为单个参数。我看过这样的例子并尝试实现它们,但经过多次尝试后,我无法成功地将我需要的参数传递到我希望函数运行的线程中。这是我想出的:
我在这里创建了一个结构来存储指向我稍后需要的 Individual
的指针。
struct ThreadData
{
Individual *m_pInd;
ThreadData(Individual pInd) : m_pInd(*pInd) {}
};
在这里,我创建了一个函数,我可以在我的程序中调用该函数,该函数创建运行函数 SetupThreadFunction
的线程,该函数采用空指针作为参数。我正在尝试将变量 data
传递给此函数,然后将其转换回 ThreadData
以便能够访问结构的项目。
void SetupThread(Individual input)
{
ThreadData *data = new ThreadData(input);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SetupThreadFunction, data , 0, 0);
delete data;
}
在这里,我创建了传递给 CreateThread
函数的函数,该函数接受一个空指针并将其转换为 ThreadData
,理论上可以访问 threadData->m_pInd
。上面 data
的相同指针已正确传递到 SetupThreadFunction
。但是,m_pInd
包含空数据而不是指向预期信息的指针。 这是为什么?
DWORD WINAPI SetupThreadFunction(LPVOID lpParameter)
{
ThreadData* threadData = (ThreadData*)lpParameter;
SetupInfo(threadData->m_pInd);
return 0;
}
是否有更正确的方法将参数传递到我正在创建的新 win32 线程中?
最佳答案
正确的模式是用new
分配对象,填充数据(如果不是通过参数给new
),传递指针给新创建的线程,并让线程在完成对象后删除
该对象。您甚至在知道线程已经启动之前就删除了
对象!
关于C++ win32线程createThread函数没有正确传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34324341/