CreateThread线程传递结构体参数
Posted sforiz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CreateThread线程传递结构体参数相关的知识,希望对你有一定的参考价值。
声明一个结构体:
struct Info
CString strInfo;
int nCopunt;
;
在CPP文件在创建一个线程:
Info info;
info.nCopunt = 100;
CString str;
str = "Hello";
info.strInfo = str;
HANDLE hThread = CreateThread(NULL, 0, ThreadProc,&info,0,0);
线程函数:
DWORD WINAPI ThreadProc(PVOID pParam)
Info* pInfo = (Info*)pParam;
return 0;
按照上面的写法,会发现在线程函数当中 pInfo获取的信息是乱码;
原因:
**创建线程之后已经过了info这个变量的作用域,在线程函数获取的时候,Info变量已经不存在了;
为了保证线程访问数据争取,必须保证了info的空间在堆上,pInfo指向的数据也放堆上,保证线程访问的时候数据有效;**
改进方法:
1:Info info;放到成员变量(这一种个人感觉 如果并发量大,可能info成员变量的值在线程访问时已经被覆盖,不过计算机的性能应该可以处理过来;)
2:Info* info = new Info;变量要在堆上;
一种是指向成员变量(保证在传递完以前不销毁),另外就是传递的结构体自己有这个内存存储空间
https://blog.csdn.net/djb100316878/article/details/52277449
以上是关于CreateThread线程传递结构体参数的主要内容,如果未能解决你的问题,请参考以下文章
CreateThread传递多个参数的方法(利用结构体的参数指针)
问一个createThread函数的线程函数参数如何传递的问题麻烦告诉我
(1) 如何向线程对应的函数传递参数?一个参数如何传递,多个参数如何传递? (2) 深入理解线程与进程的