【问题标题】:Implementing progress control using threading使用线程实现进度控制
【发布时间】:2010-03-31 05:57:32
【问题描述】:

我对 C 中的线程概念不熟悉,所以我发现很难实现它 在我的职能中。我有一个简单的应用程序,我想在其中显示一个进度条 特定的地方。在特定函数中,我将读取文件(在 for 循环中)以进行一些操作(关于我的应用程序)。在读取文件时,我想显示一个进度条,说明它正在读取文件。我知道它应该使用线程的概念来完成,但我不太清楚该怎么做。

【问题讨论】:

    标签: c winapi multithreading progress-bar


    【解决方案1】:

    在主程序中创建一个工作线程并设置执行文件处理的回调例程。
    该例程还将计算完成的百分比。每当该百分比发生变化时,发布
    值作为主线程将捕获并更新进度条控件的窗口消息。
    您可以定义应用程序内部消息,例如#define MSG_PROGRESS_VALUE (WM_USER + 1)

    编辑:示例,

    #define MSG_PROGRESS_VALUE (WM_USER + 1)
    #define MSG_WORKER_DONE    (WM_USER + 2)
    ...
    DWORD WINAPI  jobroutine(LPVOID lpParameter) {
       while (TRUE) {
          // process files ...
          // calculate new percent
          if (newpercent != oldpercent) {
             PostMessage(mainwnd, MSG_PROGRESS_VALUE, 0, newpercent);
             oldpercent = newpercent;
          }
          ...
       }
       PostMessage(mainwnd, MSG_WORKER_DONE, 0, 0);
       return 0;
    }
    ...
    MainWndProc(...)  {
       switch (uMsg) {
       ...
       case MSG_PROGRESS_VALUE:
       // update progress bar value (lParam)
       break;
     ...
    }
    ...
    WinMain(...) {
       HANDLE worker = CreateThread(NULL, 0, jobroutine, NULL, NULL, NULL);
       ...
       // Start classic windows message loop
       ...
    }
    

    【讨论】:

    • nick thanx 4 ur replay..我非常感谢......如果你能告诉我一个例子或任何关于上述内容的参考......这将非常有帮助 nick
    • @Rakesh,我发布了一个示例以了解该过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    相关资源
    最近更新 更多