2010-04-27 92 views
0

在我的应用程序中,我有一个简单的模块,我将读取某些进程的文件,这将需要 几秒钟..所以我想在进行文件时显示进度条(使用工作线程)。我创建了一个线程(下面显示的代码),我也设计了一个对话框窗口进度control.I使用下面的函数MyThreadFunction来显示进度条,但它只显示一次,消失,我不知道如何使它的工作。我试了我的尽管我是线程新手,但最好。在win 32应用程序中使用线程显示进度条!

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; 


    } 
+0

你能举出至少一个示例代码,或者我们可以理解你想要做什么清楚吗? – Fatih 2010-04-27 11:40:09

+0

法提赫,检查我的编辑。 – kiddo 2010-04-27 12:01:52

回答

1

真的要创建一个新的线程和每一个人文件中的进度条?在for()循环之外创建线程。

但是,这不是正确的方法,你的主界面仍然像一扇门。几秒钟后,Windows将在标题栏中以“Not Responding”形式将您的主窗口变成鬼。您希望使用工作线程执行文件操作,并使用主线程使用只能在工作人员使用PostMessage()指示完成时关闭的对话框来显示进度条。

相关问题