好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 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[2];
hHandleArr[0] = ::CreateThread(NULL,0,THreadProc,0,0,NULL);
hHandleArr[1] = ::CreateThread(NULL,0,THreadProc2,0,0,NULL);
DWORD dwCode2 =::WaitForMultipleObjects(2, hHandleArr,TRUE,-1); //等待多个线程结束
TCHAR szBuffer2[10];
memset(szBuffer2,0,10);
sprintf(szBuffer2,"%x",dwCode2);
MessageBox(0,szBuffer2,"线程阻塞2,正常退出",0);
//当两个线程都结束了,就关闭线程
CloseHandle(hHandleArr[0]);
CloseHandle(hHandleArr[1]);
//在WaitForMultipleObjects(2, hHandleArr,FALSE,-1); 当返回值是0时,表示第一个线程是已通知,当返回值是1时,表示第2个线程是已通知,也就是结束。
//在WaitForMultipleObjects(2, hHandleArr,TRUE,-1); 当返回值是0时,表示两个线程都是已通知,两个线程都结束了。
return 0;
}
] |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|