2016wapjpc 发表于 2017-7-21 13:52

【笔记】多个线程的正常结束

本帖最后由 2016wapjpc 于 2017-7-21 13:55 编辑

当我们在主线程中写下了子线程,子线程是正常结束,还是人为终止,就要求用 WaitForsingleObject( hHandle,-1)来判断,
是阻塞,还是向下走

当有多个 子线程时,我们是要全部结束后干事情,还 是一个结束后就可以做其它事情,都要判断
[
DWORD WINAPI THreadProc(
                                                LPVOID lpParameter      )
{      
      for(int i = 0;i<10;i++)
      {
                Sleep(1000);
                printf("--------------\n");
      }
      
      return 0;      
}

DWORD WINAPI THreadProc2(
                                                LPVOID lpParameter      )
{
      for(int i = 0;i<5;i++)
      {
                Sleep(1000);
                printf("++++++++++++++++++++\n");
      }
      
      return 0;
}

int main(int argc, char* argv[])
{   
      HANDLE hHandleArr;
      
      hHandleArr = ::CreateThread(NULL,0,THreadProc,0,0,NULL);
      
      hHandleArr = ::CreateThread(NULL,0,THreadProc2,0,0,NULL);
   
      DWORD dwCode2 =::WaitForMultipleObjects(2, hHandleArr,TRUE,-1);//等待多个线程结束

      TCHAR szBuffer2;
      memset(szBuffer2,0,10);      
      sprintf(szBuffer2,"%x",dwCode2);
      MessageBox(0,szBuffer2,"线程阻塞2,正常退出",0);

   //当两个线程都结束了,就关闭线程
      CloseHandle(hHandleArr);
      CloseHandle(hHandleArr);


      //在WaitForMultipleObjects(2, hHandleArr,FALSE,-1); 当返回值是0时,表示第一个线程是已通知,当返回值是1时,表示第2个线程是已通知,也就是结束。

    //在WaitForMultipleObjects(2, hHandleArr,TRUE,-1); 当返回值是0时,表示两个线程都是已通知,两个线程都结束了。
      return 0;
}

]

yong990520 发表于 2017-7-21 14:50

新手,还在学习中

SeriousSnow 发表于 2017-7-21 15:08

main控制台程序
然后 ::CreateThread......
页: [1]
查看完整版本: 【笔记】多个线程的正常结束