在Windows c ++中,以下内容创建一个线程:
CreateThread(NULL, NULL, function, parameter, NULL, &threadID);
这将在新线程中运行“function”并将其作为void *或LPVOID传递给“parameter”。
假设我想将两个参数传递给“function”,除了创建包含两个变量的数据结构然后将数据结构转换为LPVOID之外,还有更好的方法吗?
答案 0 :(得分:13)
不,这是唯一的方法。只需创建一个包含2个数据成员的结构,并将其作为void *
传递答案 1 :(得分:1)
#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, 0, SummationThread, ¶ms, 0, NULL);
WaitForSingleObject(thdHandle, INFINITE);
return 0;
}
答案 2 :(得分:0)
这是将参数传递给线程的标准方法,但是您的新线程可以访问进程中的任何内存,因此只要您提供,就可以将难以传递的内容或大量数据作为共享资源进行访问适当的同步控制。
答案 3 :(得分:0)
我认为有更好的方法,我在嵌入式代码中一直使用它。它实际上源于将成员方法传递给与CreateThread()非常相似的函数的愿望。需要的原因是因为该类已经具有成员数据(具有适当的setter)所有线程代码所需的参数。如果您有兴趣,可以参考I wrote up a more detailed explanation。在文章中,您可以看到OSTaskCreate(),只是在心理上替换CreateMethod()。