主线程退出问题

    主线程如果正常退出(即执行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并没有执行完成。
请按任意键继续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值