主线程退出问题
2015-06-15 09:34
393 查看
主线程如果正常退出(即执行return返回),那么整个进程中所有的其他线程都会被清理; 如果主线程内执行ExitThread函数进行退出,那么主线程会执行退出,但是其他的线程不会被清理,而会一直执行到正常退出为止。
#include <iostream> #include <process.h> #include <Windows.h> using namespace std; UINT WINAPI ThreadProc(LPVOID pParam) { int p = (int)pParam ; int i = 20 ; while(--i) cout<<p<<"TRUE"<<i<<endl; cout<<"ThreadProc exit "<<endl; return 0 ; } void ThreadCreate() { unsigned int dwThreadID ; HANDLE hThread =(HANDLE) _beginthreadex(NULL,0,ThreadProc,(PVOID)0,0,&dwThreadID) ; if(hThread) { cout<<"Thread is created !"<<endl; CloseHandle(hThread) ; } HANDLE hThread1 =(HANDLE) _beginthreadex(NULL,0,ThreadProc,(PVOID)1,0,&dwThreadID); if(hThread1) { cout<<"Thread1 is created"<<endl; CloseHandle(hThread1) ; } } int main() { ThreadCreate() ; cout<<"main1111 exit"<<endl; ExitThread(0) ; //主函数调用ExitThread退出,但是子线程并不会随之退出 cout<<"main2222 exit"<<endl; return 0 ;//主线程退出,子线程也随之退出 }
结果1:主线程执行ExitThread函数进行退出,当主线程执行ExitThread 退出之后,主线程剩余的部分将不会执行,但是其他的线程都会运行,直到结束。
Thread is created !
0TRUE19
0TRUE18
0TRUE17
0TRUE16
0TRUE15
0TRUE14
0TRUE13
0TRUE12
0TRUE11
0TRUE10
0TRUE9
0TRUE8
0TRUE7
0TRUE6
0TRUE5
0TRUE4
0TRUET hread1 is created
3
0TRUE2
0TRUE1
ThreadProc exit
main1111 exit //主程序退出,整个结果中没有输出“main2222 exit”
1TRUE19
1TRUE18
1TRUE17
1TRUE16
1TRUE15
1TRUE14
1TRUE13
1TRUE12
1TRUE11
1TRUE10
1TRUE9
1TRUE8
1TRUE7
1TRUE6
1TRUE5
1TRUE4
1TRUE3
1TRUE2
1TRUE1
ThreadProc exit
请按任意键继续…
结果2:主线程执行 return 0 进行退出,其他线程都会直接终止运行。
Thread is created !
0TRUE19
0TRUE18
0TRUE17
0TRUE16
0TRUE15
0TRUE14
0TRUE13
0TRUE12
0TRUE11
0TRUE10
0TRUE9
0TRUE8
0TRUE7
0TRUE6
0TRUE5
Thread1 is created
0TRUE4
0TRUE3
0TRUE2
0TRUE1
ThreadProc exit
main1111 exit
1TRUE19
1TRUEmain2222 exit //主线程退出,线程Thread1并没有执行完成。
请按任意键继续…
相关文章推荐
- 【猪猪-前端】微信打飞机高质量Demo,学习HTML5+Canvas技术编写,下载即可使用,注释齐全。
- Git-5
- windows下 qt5&vs2010 在qtCreator下中文乱码
- 【OGG】OGG简单配置双向复制(三)
- MongoVUE一次性导入多条数据到数据库
- 安装PHP后,启动YII项目报错
- 在Ext JS 5应用程序中如何使用路由
- iOS应用架构谈 网络层设计方案
- Python中datetime常用时间处理方法
- MySql -- 创建表时 engine=innodb和engine=myisam的区别
- MySql -- 创建表时 engine=innodb和engine=myisam的区别
- MySql -- 创建表时 engine=innodb和engine=myisam的区别
- 使用ab进行页面的压力测试
- LeetCode:Add Two Numbers
- 2015年 移动开发都有哪些热点?
- .NET平台下的微信SDK(Rabbit.WeiXin)开源发布
- 比较全面的MySQL优化参考
- Android 用源代码写layout布局
- Swift EventKit的初学者指南--请求权限
- JQuery jsonp使用小记