windows API(8)线程控制

本文介绍了Windows API中线程控制的相关知识,包括如何让线程暂停(Sleep函数、SuspendThread函数)、如何恢复线程(ResumeThread函数)以及如何等待线程结束(WaitForSingleObject、WaitForMultipleObjects、GetExitCodeThread函数)。强调了线程挂起的注意事项,即挂起多次的线程需调用相同次数的恢复函数才能真正恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程控制

如何让线程停下来
  1. 线程让自己停下来,Sleep函数
  2. 线程让别的线程停下来,SuspendThread函数
  3. 线程让别的线程恢复,ResumeThread()函数

注意,线程是可以挂起多次的,必须调用同样次数的恢复线程函数才可以让线程恢复

等待线程结束
  1. WaitForSingleObject()函数,等待上一个线程执行结束后,再接着执行
int main()
{
    HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, NULL, NULL);
    
    //在线程执行完毕后,才会接着执行下面的内容
    WaitForSingleObject(hThread, INFINITE);
    
    printf("线程执行完毕\n");
    CloseHandle(hThread);
    return 0;
}
  1. WaitForMultipleObjects()函数
int main()
{
    HANDLE harrThread[2];
    harrThread[0] = CreateThread(NULL, 0, ThreadProc, NULL, NULL, NULL);
    harrThread[1] = CreateThread(NULL, 0, ThreadProc, NULL, NULL, NULL);
    
    //在线程全部执行完毕后,才会接着执行下面的内容
    WaitForMultipleObjects(2, harrThread, TRUE, INFINITE);
    printf("线程执行完毕\n");
    
    CloseHandle(harrThread[0]);
    CloseHandle(harrThread[1]);
    return 0;
}
  1. GetExitCodeThread()函数
    获取线程的返回结果
int main()
{
    HANDLE harrThread[2];
    DWORD dwResult1;
    DWORD dwResult2;
    
    harrThread[0] = CreateThread(NULL, 0, ThreadProc, NULL, NULL, NULL);
    harrThread[1] = CreateThread(NULL, 0, ThreadProc, NULL, NULL, NULL);
    
    //在线程全部执行完毕后,才会接着执行下面的内容
    WaitForMultipleObjects(2, harrThread, TRUE, INFINITE);
    
    //dwResult1和dwResult2表示返回值
    GetExitCodeThread(harrThread[0], &dwResult1);
    GetExitCodeThread(harrThread[1], &dwResult2);
    printf("线程执行完毕\n");
    CloseHandle(harrThread[0]);
    CloseHandle(harrThread[1]);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值