我有一个程序,主线程里面通过事件数组来触发所有子线程同时接收工作
CEvent  recv[16];
......
 while(1)
{
   for(i=0;i<16;i++)
    {
       recv[i].SetEvent;
    }
         waitforsingleobject(recvfinish.m_hobject,INFINITE);//关键是这里,这里设了一个10ms定时器当时间一到就 
    //recvfinish.setevent,然后进行后面的工作,但是定时器不准,也不想用定时器了,请问有没有什么办法,
    //当所有子线程将数据都写完后,主线程就会知道可以继续下一步了,即不用定时器来控制下一步操作}
 
各个子线程里面分别等待各自的recv[i],来同时向一个buf的不同位置写入数据 
 while(waitforsingleobject(recv[i].m_hobject,INFINITE) == WAIT_OBJECT_0)
{
....
}

解决方案 »

  1.   

    主线程用 WaitForMultipleObjects 等了。
    怕影响消息循环,那就开一个专门的线程等了。
      

  2.   

    当所有子线程将数据都写完后,主线程就会知道可以继续下一步了,
    waitForMultiObject()不就可以了么,不明白你的意思
      

  3.   

    主线程中不要用waitForMultiObject()等待工作线程退出或什么的,会阻塞主线程的消息循环。当工作线程执行完后可以给主线程的窗口发消息嘛,然后你可以在消息响应函数中做你想做的处理。至于主线程中等待工作线程退出的方法,可以看看下面的帖子:
    http://blog.csdn.net/qingfeng_happy5/archive/2008/12/14/3515283.aspx