线程传递结构体参数

来源:互联网 发布:大学生软件实训基地 编辑:程序博客网 时间:2024/06/16 04:32

声明一个结构体:
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 CMy01demoDlg::ThreadProc(PVOID pParam){    Info* pInfo = (Info*)pParam;    return 0;}

按照上面的写法,会发现在线程函数当中 pInfo获取的信息是乱码;
原因:
**创建线程之后已经过了info这个变量的作用域,在线程函数获取的时候,Info变量已经不存在了;
为了保证线程访问数据争取,必须保证了info的空间在堆上,pInfo指向的数据也放堆上,保证线程访问的时候数据有效;**

改进方法:

1:Info info;放到成员变量(这一种个人感觉 如果并发量大,可能info成员变量的值在线程访问时已经被覆盖,不过计算机的性能应该可以处理过来;)
2:Info* info = new Info;变量要在堆上;

一种是指向成员变量(保证在传递完以前不销毁),另外就是传递的结构体自己有这个内存存储空间

1 0
原创粉丝点击