Windows c++线程参数传递

Windows C++ Thread Parameter Passing

本文关键字:参数传递 线程 c++ Windows      更新时间:2023-10-16

在Windows c++中,下面的代码创建一个线程:

CreateThread(NULL, NULL, function, parameter, NULL, &threadID);

这将在一个新线程中运行"function",并将"parameter"作为void*或LPVOID传递给它。

假设我想传递两个参数到"函数",有没有一个更好的方法来做它除了创建一个包含两个变量的数据结构,然后将数据结构转换为LPVOID?

不,这是唯一的办法。只需创建一个包含两个数据成员的结构体并将其作为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, 0, SummationThread, &params, 0, NULL);
    WaitForSingleObject(thdHandle, INFINITE);
    return 0;
}

这是传递参数给线程的标准方式,但是你的新线程可以访问进程中的任何内存,所以只要你提供适当的同步控制,很难传递的东西或大量数据可以作为共享资源访问。

我认为有一个更好的方法,我一直在我的嵌入式代码中使用它。它实际上源于将成员方法传递给与CreateThread()非常相似的函数的愿望。之所以需要这样做,是因为类已经拥有线程代码所需的所有参数(带有适当的setter)作为成员数据。我写了一份更详细的解释,如果你感兴趣的话可以参考一下。在您看到OSTaskCreate()的文章中,只需在心里替换CreateMethod()。