问题描述
|
在Windows c ++中,以下创建线程:
CreateThread(NULL,NULL,function,parameter,&threadID);
这将在新线程中运行“功能”,并将其“参数”作为void *或LPVOID传递。
假设我想将两个参数传递给\“ function \”,除了创建包含两个变量的数据结构然后将数据结构转换为LPVOID之外,还有更好的方法吗?
解决方法
不,那是唯一的方法。只需使用2个数据成员创建一个结构,然后将其作为void *传递即可
,
#include <windows.h>
#include <stdio.h>
struct PARAMETERS
{
int i;
int j;
};
DWORD WINAPI SummationThread(void* param)
{
PARAMETERS* params = (PARAMETERS*)param;
printf(\"Sum of parameters: i + j = \\n\",params->i + params->j);
return 0;
}
int main()
{
PARAMETERS params;
params.i = 1;
params.j = 1;
HANDLE thdHandle = CreateThread(NULL,SummationThread,¶ms,NULL);
WaitForSingleObject(thdHandle,INFINITE);
return 0;
}
,这是将参数传递给线程的标准方法,但是您的新线程无法访问进程中的任何内存,因此只要您提供适当的同步控制,就可以将难以传递的内容或大量数据作为共享资源进行访问。
,我认为有更好的方法,并且我一直在嵌入式代码中使用它。实际上,它是出于将成员方法传递给与CreateThread()非常相似的函数的愿望而产生的。所需的原因是因为该类已经具有线程代码所需的所有参数作为成员数据(带有适当的设置器)。我写了一个更详细的解释,如果您感兴趣的话可以参考。在本文中,您将看到OSTaskCreate(),在精神上仅替代CreateMethod()即可。