设为首页 加入收藏

TOP

C++线程创建传递的参数发生改变
2015-11-10 13:45:47 来源: 作者: 【 】 浏览:5
Tags:线程 创建 传递 参数 发生 改变

看看如下代码,觉得输出会是什么?


#include "stdafx.h"
#include
#include
using namespace std;


DWORD WINAPI Func(LPVOID p);
typedef struct
{
? ? int firstArgu;
? ? long secArgu;


}MyType;


void? test()
{
? ? MyType MyTypeArgu={0};
? ? MyTypeArgu.firstArgu=1;
? ? MyTypeArgu.secArgu=1;
? ? CreateThread(NULL,0,Func,&MyTypeArgu,0,NULL);
    //Sleep(1000);
}


void main()
{
? ? test();
? ? system("pause");
}
DWORD WINAPI Func(LPVOID p)
{?
? ? MyType* param=(MyType*)p;
? ? int? intValue=param->firstArgu;
? ? long longValue=param->secArgu;
? ? cout <<"firstArgu="<? ? cout<<"请等待……"<? ? return 0;
}


最终的输出结果其实并不确定。


并不是输出
firstArgu=1
secArgu=1
关键是CreateThread创建线程之后,将指针传递给线程方法后,test方法就退出了,就会将MyType的内存释放了,导致线程再接受到指针后,访问内存,却不是原来的数据了。


如果想要输出正确的结果,只需将//Sleep(1000)注释取消,等待线程方法访问之后,再退出就可以了。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java 内存映射文件MappedByteBuff.. 下一篇PyCharm新建Python文件名称与将导..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: