WaitForMultipleObjects等待多个子线程结束

huangzhtao 2009-09-05 08:37:58
我看到了有这样的方法等待多个子线程结束的方法,但是为什么我用了不行,代码如下:

HANDLE t[2];
CWinThread* t1 = AfxBeginThread(myThread, this);
t1->m_bAutoDelete = FALSE;
CWinThread* t2 = AfxBeginThread(myThread2, this);
t2->m_bAutoDelete = FALSE;
t[1] = t1->m_hThread;
t[2] = t2->m_hThread;
long hu = WaitForMultipleObjects(2, t, TRUE, INFINITE);
int errNum;
switch(hu)
{
case WAIT_TIMEOUT:
AfxMessageBox("超时");
break;
case WAIT_FAILED:
errNum = GetLastError();
strInfo.Format("等待失败:%d", errNum);
AfxMessageBox(strInfo);
break;
default:
{
AfxMessageBox("成功");
}
}
CloseHandle(t[1]);
CloseHandle(t[2]);
delete t1;
delete t2;

为什么返回是WAIT_FAILED,GetLastError()值为6句柄无效?
...全文
279 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bragi523 2009-09-09
  • 打赏
  • 举报
回复
笔误?
huangzhtao 2009-09-09
  • 打赏
  • 举报
回复
2了,果然是这个问题,居然没有注意到。
dushuchen 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tr0j4n 的回复:]
HANDLE *t=new HANDLE[2];
[/Quote]

为什么在堆里?
stjay 2009-09-07
  • 打赏
  • 举报
回复

t[1] = t1->m_hThread;
t[2] = t2->m_hThread;


改成试试
t[0] = t1->m_hThread;
t[1] = t2->m_hThread;
wltg2001 2009-09-07
  • 打赏
  • 举报
回复
HANDLE t[2];
CWinThread* t1 = AfxBeginThread(myThread, this);
t1->m_bAutoDelete = FALSE;
CWinThread* t2 = AfxBeginThread(myThread2, this);
t2->m_bAutoDelete = FALSE;
t[1] = t1->m_hThread;
t[2] = t2->m_hThread;
====================
C++的数组是从0开始的,所以应该写作t[0]=t1->m_hThread;和t[1]=t2->m_mhThread;
ljz888666555 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dushuchen 的回复:]
引用 1 楼 tr0j4n 的回复:
HANDLE *t=new HANDLE[2];


为什么在堆里?
[/Quote]
??
MoXiaoRab 2009-09-05
  • 打赏
  • 举报
回复
HANDLE *t=new HANDLE[2];

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧