2
在我的应用程序中,我有一个简单的模块,我将读取某些进程的文件,这将需要 几秒钟..所以我想在进程中显示进度条(使用工作线程)。我创建了一个线程(下面显示的代码),我也设计了一个对话框窗口进度control.I使用下面的函数MyThreadFunction来显示进度条,但它只显示一次,消失,我不知道如何使它的工作。我试了我的尽管我是线程新手,但最好能帮助我。如何在win32中使用线程功能显示进度条?
reading files
void ReadMyFiles()
{
for(int i = 0; i < fileCount ; fileCount++)
{
CWinThread* myThread = AfxBeginThread((AFX_THREADPROC)MyThreadFunction,NULL);
tempState = *(checkState + index);
if(tempCheckState == NOCHECKBOX)
{
//my operations
}
else//CHECKED or UNCHECKED
{
//myoperation
}
myThread->PostThreadMessage(WM_QUIT,NULL,NULL);
}
}
thread functions
UINT MyThreadFunction(LPARAM lparam)
{
HWND dialogWnd = CreateWindowEx(0,WC_DIALOG,L"Proccessing...",WS_OVERLAPPEDWINDOW|WS_VISIBLE,
600,300,280,120,NULL,NULL,NULL,NULL);
HWND pBarWnd = CreateWindowEx(NULL,PROGRESS_CLASS,NULL,WS_CHILD|WS_VISIBLE|PBS_MARQUEE,40,20,200,20,
dialogWnd,(HMENU)IDD_PROGRESS,NULL,NULL);
MSG msg;
PostMessage(pBarWnd, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
PostMessage(pBarWnd,PBM_SETPOS,0,0);
while(PeekMessage(&msg,NULL,NULL,NULL,PM_NOREMOVE))
{
if(msg.message == WM_QUIT)
{
DestroyWindow(dialogWnd);
return 1;
}
AfxGetThread()->PumpMessage();
Sleep(40);
}
return 1;
}
克里斯,我没有得到那个点“阻止行为”,你能告诉我它是什么吗?如果你给我一个例子,这将是伟大的! – kiddo 2010-04-27 11:15:38
“阻止行为”是指读取文件操作阻止UI线程正常处理消息的事实。 – 2010-04-27 19:30:37