C++线程创建传递的参数发生影响
发布时间:2021-12-10 19:41:24 所属栏目:PHP教程 来源:互联网
导读:看看如下代码,觉得输出会是什么? #include stdafx.h #include windows.h #include iostream using namespace std; DWORD WINAPI Func(LPVOID p); typedef struct { int firstArgu; long secArgu; }MyType; void test() { MyType MyTypeArgu={0}; MyTypeArgu
看看如下代码,觉得输出会是什么? #include "stdafx.h" #include <windows.h> #include <iostream> 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="<<intValue<<endl<<"secArgu="<<longValue<<"."<<endl; cout<<"请等待……"<<endl<<endl; return 0; } 最终的输出结果其实并不确定。 并不是输出 firstArgu=1 secArgu=1 关键是CreateThread创建线程之后,将指针传递给线程方法后,test方法就退出了,就会将MyType的内存释放了,导致线程再接受到指针后,访问内存,却不是原来的数据了。 如果想要输出正确的结果,只需将//Sleep(1000)注释取消,等待线程方法访问之后,再退出就可以了。 ![]() (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |