2010-03-31 47 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