Windows c++线程参数传递
Windows C++ Thread Parameter Passing
在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, ¶ms, 0, NULL);
WaitForSingleObject(thdHandle, INFINITE);
return 0;
}
这是传递参数给线程的标准方式,但是你的新线程可以访问进程中的任何内存,所以只要你提供适当的同步控制,很难传递的东西或大量数据可以作为共享资源访问。
我认为有一个更好的方法,我一直在我的嵌入式代码中使用它。它实际上源于将成员方法传递给与CreateThread()非常相似的函数的愿望。之所以需要这样做,是因为类已经拥有线程代码所需的所有参数(带有适当的setter)作为成员数据。我写了一份更详细的解释,如果你感兴趣的话可以参考一下。在您看到OSTaskCreate()的文章中,只需在心里替换CreateMethod()。
相关文章:
- 如何将带有参数的方法传递给线程以执行?
- 如何将参数传递给已经开始运行的线程
- 带参数的线程调用库函数
- 在 C++11 中,如何不将参数传递给线程
- 传递给线程更改的参数
- 多个线程传递参数
- 将一个方法作为参数传递给另一个方法,该方法本身将传递的方法传递给 std 线程
- POSIX线程,将多个参数传递给具有结构的函数
- C 11-当我将局部变量作为参数传递到线程中时,它是否安全
- 将参数传递给线程函数(模板)
- 如何要求接口中参数的线程安全
- 多线程 C++ 将参数传递给函数
- 如何在不将类数据成员作为参数传递的情况下访问线程中的类数据成员
- 在多线程处理时将参数传递给函数
- 线程传递字符串参数的布尔函数
- std::目标获取指针参数的线程错误
- std::带可移动、不可复制参数的线程
- std::使用类参数的线程初始化会导致类对象被多次复制
- 使用动态参数创建线程
- 传递线程例程多个变量和堆栈大小