2010-03-31 45 views
2

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

回答

4

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

缺口感谢名单4个乌尔replay..I不胜感激......如果u能告诉我一个例子或关于above..it任何提及将是非常有益的缺口 – kiddo 2010-03-31 06:38:27

+0

@Rakesh,我发布了一个样本来了解这个过程。 – 2010-03-31 07:09:24