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.youkuaiyun.com/djb100316878/article/details/52277449

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值