全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3250
推到 Plurk!
推到 Facebook!

執行續傳遞

答題得分者是:Victor4022
chinablack
一般會員


發表:6
回覆:2
積分:1
註冊:2007-08-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-11-28 00:23:00 IP:123.193.xxx.xxx 訂閱
最近在學習如何撰寫多執行緒的程式
主要的內容大致上是,子執行緒產生一個變數後 來讓主執行緒(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

編輯記錄
chinablack 重新編輯於 2011-11-27 09:23:52, 註解 無‧
chinablack 重新編輯於 2011-11-27 09:30:39, 註解 無‧
Victor4022
中階會員


發表:0
回覆:76
積分:90
註冊:2011-02-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-11-28 07:49:38 IP:122.126.xxx.xxx 訂閱
您好


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‧
系統時間:2024-04-25 16:02:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!