c - 使用线程实现进度控制

标签 c winapi multithreading progress-bar

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

最佳答案

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

关于c - 使用线程实现进度控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2550802/

相关文章:

winapi - GDI、GDI+ 和 OpenGL 真的过时/弃用了吗?

java - 通知不起作用..永远等待线程 Java

c++ - 多线程中的套接字

c++ - 为什么 printf 函数族关心语言环境?

multithreading - 如何在不输入的情况下测试临界区是否被锁定?或者,如何等到 critsec 被另一个线程拥有?

C - 在 float 中打印 int 变量

c++ - 来自 QBitmap 的 QPixmap

Java 线程 : Run method cannot throw checked exception

c - scanf 被跳过

c - 如何将数组的值分配给 c 中的另一个数组(制作副本)?