執行續傳遞 |
答題得分者是:Victor4022
|
chinablack
一般會員 發表:6 回覆:2 積分:1 註冊:2007-08-07 發送簡訊給我 |
最近在學習如何撰寫多執行緒的程式
主要的內容大致上是,子執行緒產生一個變數後 來讓主執行緒(Form1)利用 透過網路找尋資料後 了解 在主執行緒與子執行緒之間,可以利用postmessage 來傳遞訊息, 在MSDN上看了有關PostMessage的函式內所需填入的變數 PosteMessage( hwnd,Msg , WPARAM, LPARAM )問題一‧那在我所建立的子執行緒內PostMessage的函式所需要鍵入的內容不知是否是 PosteMessage( hwnd, WM_USER, NULL, Value )雖然了解hwnd是代表所要傳遞對象的名字,但是自己真的不清楚第一個hwnd是要填入什麼東西 建立後 問題二‧在主執行緒(Form1)方面該怎麼去接收子執行緒所產生的變數 在網路及論壇上有找到可以利用message map 來接收 問題三‧該如何建立message map,那建立後又該如何正確的接收子執行緒所產生的變數在利用PostMessage,因為網路上看得真的有點模糊 問題三‧不知除了以上的方法外,是否有另外的方式可以讓兩個執行緒之間接收和傳遞變數 麻煩各位幫我解答,謝謝各位前輩!!!! 我所用的編譯器是BCB6.0 編輯記錄
|
Victor4022
中階會員 發表:0 回覆:76 積分:90 註冊:2011-02-20 發送簡訊給我 |
您好
Q1. 第一個 hWnd 就是 Form 的 Handle... Q2. 看看底下 Delphi 原始碼就知道 [code delphi] TCommonDialog = class(TComponent) private procedure WMDestroy(var Message: TWMDestroy); message WM_DESTROY; [/code] Q3.至於 PostMessage 也是個不錯方法,看過有程式設計利用第四個參數 (lParam) 傳入"結果的指標", 但我有個疑慮,就是如果是個 FreeOnTerminate 的 Thread 架構,該塊內部宣告的記憶體,"應該"也在 Thread 結束時歸還了,這樣會有問題吧?! 如果有時間的話, 建議您可去各大圖書管或二手書商找看看這侯捷寫的這一本書: Win32 多緒程式設計: http://jjhou.boolan.com/jjtbooks-multithreaded-in-win32.htm 是本厚實Threading 基礎的好書... 如果沒時間或有專案時程壓力, 小弟僅能分享自己的心得, 我會這麼做: 1. 將資料結構納入同步物件(例如 Windows Event Object /Critical Section Object/ Mutex Object) -> 可避免過多全域變數, 也可增加操控性 2. 由 Main Thead 建立此自行定義的資料結構, 並在適當時機釋放 3. 建立 sub thread, 由 Main Thread 將自行定義的資料結構(Pointer)傳入 sub thread, 並且使用同步物件處理不同 Thread 間的同步機制 希望對您有幫助, 我也還在學習之路 :)
編輯記錄
Victor4022 重新編輯於 2011-11-27 16:56:16, 註解 加入 PostMessage‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |