「MFCの基礎 - マルチスレッド」の版間の差分

35行目: 35行目:
       // スレッド処理の開始
       // スレッド処理の開始
       m_pLoadXMLThread->ResumeThread();
       m_pLoadXMLThread->ResumeThread();
       while(WaitForSingleObject(pTh->m_hThread, 100) == WAIT_TIMEOUT)
       while(WaitForSingleObject(m_pLoadXMLThread->m_hThread, 100) == WAIT_TIMEOUT)
       {
       {
           // フリーズしないようにする
           // フリーズしないようにする
45行目: 45行目:
           }
           }
       }
       }
       delete pTh;
       delete m_pLoadXMLThread;
     }
     }
    // マルチスレッドの応用(ウェイトウィンドウを表示する)
    //m_pLoadXMLThread = ::AfxBeginThread(LoadXMLThreadFunc, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED, NULL);
    //if(m_pLoadXMLThread)
    //{
    //  CRect rc;
    //  HWND hNotifyWnd = CreateDialog(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDD_PROCESSING), this->m_hWnd, (DLGPROC)YCommonProc);
    //  ::ShowWindow(hNotifyWnd, SW_SHOW);
    //  ::GetClientRect(&rc);
    //  ::MoveWindow(hNotifyWnd, (rc.right - rc.left) / 2 - 100, (rc.bottom - rc.top) / 2 - 25, 200, 50, TRUE);
    //  m_pLoadXMLThread->m_pMainWnd = this;
    //  m_pLoadXMLThread->m_bAutoDelete = FALSE;
    //  m_pLoadXMLThread->ResumeThread();
    //  while(::WaitForSingleObject(m_pLoadXMLThread->m_hThread, 100) == WAIT_TIMEOUT)
    //  {
    //      // フリーズしないようにする
    //      MSG msg;
    //      while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    //      {
    //        ::TranslateMessage(&msg);
    //        ::DispatchMessage(&msg);
    //      }
    //  }
    //  delete m_pLoadXMLThread;
    //  ::DestroyWindow(hNotifyWnd);
    //}
  }
  }