主线程如果正常退出(即执行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并没有执行完成。
请按任意键继续…
时间: 2024-12-23 04:24:02