2
我對C中的線程概念很陌生,所以我發現很難在我的函數中實現這個 。我有一個簡單的應用程序,我想在一個特定的地方顯示進度條 。在特定的函數中,我將讀取文件(在for循環中)進行一些操作(關於我的應用程序)。當它正在讀取我想要顯示進度條的文件時,說明它正在讀取文件。我知道它應該使用線程的概念來完成,但我不太確定如何去做。使用線程實現進度控制
我對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
...
}
缺口感謝名單4個烏爾replay..I不勝感激......如果u能告訴我一個例子或關於above..it任何提及將是非常有益的缺口 – kiddo 2010-03-31 06:38:27
@Rakesh,我發佈了一個樣本來了解這個過程。 – 2010-03-31 07:09:24