解决方案 »

  1.   

    出问题的地方是找到了,但是不知道为什么会出现这种问题
    当按下停止按钮的时候
    PostQueuedCompletionStatus(m_hIOCP,0,0,(LPOVERLAPPED)&pIoData->ol);
    WaitForMultipleObjects(m_numberOfThread,m_hThreads,TRUE,INFINITE);
    当线程中执行到CEdit的下面几个函数之后就不动了,注释掉只能就能正常结束了
    m_EdtRecvSnd.GetWindowTextLength();
    m_EdtRecvSnd.SetSel(i,i);
    m_EdtRecvSnd.ReplaceSel(str);
    有谁知道为什么WaitForMultipleObjects会和CEdit的成员函数冲突???
      

  2.   

    "在主线程中慎用WaitForSingleObject (WaitForMultipleObjects) "http://www.cnblogs.com/shootingstars/archive/2004/07/15/24602.html
      

  3.   

    根据2楼的链接,找到了等待多个线程结束的解决办法,如下:

    while(1)
    {
    MSG msg;
    DWORD dwRet = MsgWaitForMultipleObjects(n,m_hThreads,FALSE,INFINITE,QS_ALLINPUT); if (dwRet >=WAIT_OBJECT_0 && dwRet <WAIT_OBJECT_0+n)
    {
    m +=1;
    if (m >= n)
    {
    break;
    }

    else
    {
    PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
    DispatchMessage(&msg); 
    }
    }