加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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)注释取消,等待线程方法访问之后,再退出就可以了。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读