【问题标题】:Displaying progressbar using threading in win 32 applicaition!在win32应用程序中使用线程显示进度条!
【发布时间】:2010-04-27 11:34:38
【问题描述】:

在我的应用程序中,我有一个简单的模块,我将读取一些需要执行的进程的文件 几秒钟..所以我想在文件正在进行时显示一个进度条(使用工作线程)。我创建了一个线程(代码如下所示),并且我设计了一个带有进度控制的对话框窗口。我使用了函数 MyThreadFunction下面显示进度条,但它只显示一次并消失,我不知道如何使它工作。尽管我是线程新手,但我尽了最大努力。

 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;


    }

【问题讨论】:

  • 您能否至少给出一个示例代码或一些我们可以清楚地理解您想要做什么的东西?

标签: winapi multithreading progress-bar


【解决方案1】:

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

但这不是正确的做法,您的主 UI 仍然像门钉一样死气沉沉。几秒钟后,Windows 会在标题栏中显示“无响应”,从而使您的主窗口变成幽灵。您想使用工作线程进行文件操作,并使用主线程使用对话框显示进度条,该对话框只能在工作线程使用 PostMessage() 指示完成时关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多