后台要长时间进行数据处理,如何加上进度条,不使界面象死了一样.
在执行数据处理时,我加了一个等待的线程,但没效果,为什么?
代码:UINT Wait(LPVOID lParam)
{
while (1)
{
g_nPos += 5;
if(g_nPos == -85)
AfxMessageBox("DFDF");
g_ctrlProgress.SetPos(g_nPos);
if(g_nPos == 700)
g_nPos = -100; if(g_bResult == TRUE)
return 0; // Sleep(1000*5); //每5秒检测一次
}
}
//加上等待进程
HWND h = GetSafeHwnd();
AfxBeginThread((AFX_THREADPROC)Wait, h);
在执行数据处理时,我加了一个等待的线程,但没效果,为什么?
代码:UINT Wait(LPVOID lParam)
{
while (1)
{
g_nPos += 5;
if(g_nPos == -85)
AfxMessageBox("DFDF");
g_ctrlProgress.SetPos(g_nPos);
if(g_nPos == 700)
g_nPos = -100; if(g_bResult == TRUE)
return 0; // Sleep(1000*5); //每5秒检测一次
}
}
//加上等待进程
HWND h = GetSafeHwnd();
AfxBeginThread((AFX_THREADPROC)Wait, h);
{
...
MSG msg;
if(GetMessage (&msg, NULL, 0, 0))
{
WindowProc(msg.message,msg.wParam,msg.lParam);
}
}
{
//
m_progress.SetPos(i/10000);
m_progress.Invalidate();
MSG msg;
if(GetMessage (&msg, NULL, 0, 0))
{
WindowProc(msg.message,msg.wParam,msg.lParam);
}
}
CMyDlg::StartProgress()
{
m_bRunProgress = TRUE;
m_ProgressBar.SetRange(...);//设置进度的显示范围
AfxBeginThread(Progress,(LPVOID*)this,THREAD_PRIORITY_NORMAL);
}
CMyDlg::StopProgress()
{
m_bRunProgress = FALSE;
}
线程函数:
UINT Progress(LPVOID pParam);//函数声明
UINT Progress(LPVOID pParam)
{
CMyDlg *pDlg = (CMyDlg *)pParam;
int iCount = 0;
while(pDlg->m_bRunProgress)
{
//Do Some processing
pDlg->m_ProgressBar.SetPos(iCount);
iCount++;
}
return 0;
}