while( (dwRead = ReadFile.Read(pBuf, dwStep)) > 0 )
{//讀取源檔案,一次一塊
//將讀取的資料寫入目標檔案中
WriteFile.Write( pBuf, dwRead );
dwCompleteSize += dwRead;
pInfo->m_nSpeed += dwRead;
//更新進度
while(!pInfo->pUIThread->PostThreadMessage(WM_THREADINFO, 3, (LPARAM) int((dwCompleteSize*1.0 / dwTotalSize) * 100)))
{
Sleep(10);
}
}
//完成
delete pBuf;
//關閉檔案
ReadFile.Close();
WriteFile.Close();
//發送結束訊息,用于關閉進度顯示模塊
if (!pInfo->pUIThread->PostThreadMessage(WM_THREADINFO, 10, 1))
{
Sleep(10);
}
//pInfo->KillTimer(1);
//pInfo->KillTimer(2);
pInfo->m_stTip.SetWindowText("復制完成!");
在一個作業執行緒函式里面,發送用戶界面訊息;用戶界面處理函式如下
//顯示訊息處理函式
void CcbCopyFile::OnThreadInfo(WPARAM wParam,LPARAM lParam)
{
if (wParam == 0)
{//源檔案路徑引數
m_szSrcPath.Format("%s",lParam);
//AfxMessageBox(m_szSrcPath);
}
else if (wParam == 1)
{//目標檔案路徑引數
m_szDesPath.Format("%s",lParam);
//AfxMessageBox(m_szDesPath);
}
else if (wParam == 2)
{//啟動
m_pProgressDlg = new CCopyFileDlg;
m_pProgressDlg->Create(IDD_DIALOG1);
m_pProgressDlg->m_szSrcPath = m_szSrcPath;
m_pProgressDlg->m_szDesPath = m_szDesPath;
m_pProgressDlg->UpdateData(FALSE);
m_pProgressDlg->ShowWindow(TRUE);
}
else if (wParam == 3)
{//進度
m_pProgressDlg->m_Progress.SetPos(lParam);
}
else if (wParam == 4)
{//速度
m_pProgressDlg->UpdateSpeed(lParam);
}
else if (wParam == 5)
{//時間
float *p = (float *)lParam;
m_pProgressDlg->UpdateTime(*p);
}
else
{//完成
m_pProgressDlg->OnCancel();
}
//return 0;
問題:當運行用戶界面執行緒時,拖動一下用戶界面的視窗后,
進度條不會再更新了;如果不拖動,則一切運行正常。
為什么????
uj5u.com熱心網友回復:
求大牛!!!
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
《深入淺出MFC》轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/96798.html
標籤:進程/線程/DLL
上一篇:0x55181CDA(mfc110ud.dll)有未經處理的例外,0XC0000005例外:讀取位置0xCDCDCE3D時發生沖突
下一篇:0x56C61CDA(mfc110ud.dll)有未經處理的例外,0XC0000005例外:讀取位置0xCDCDCED時發生沖突
