您的位置:首页 > 其它

主线程退出问题

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并没有执行完成。

请按任意键继续…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: