Multithread的範例 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
分享給所有沒時間來聽2011年QCOM舉辨Multithread講座的朋友!
請至qcom捷康的網站下載,網址如下: 請搭配講義看比較能了解用意喔! (左下角會有標 ex 字表有例子) qcomgroup.com.tw/embarcadero/press_and_event.htm 對於範例有疑問者,歡迎和我討論與指教! : ) 謝謝大家! 蕭沖
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan 編輯記錄
aftcast 重新編輯於 2011-07-22 02:23:11, 註解 無‧
|
boss.tw
高階會員 發表:15 回覆:109 積分:194 註冊:2005-05-17 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
謝謝你的支持喔!
下回有機會的話,報一下你的大名讓我認識一下吧… 這回講座應該有一些ktop的會員,但都沒來相認一下…我覺得很可惜。希望可以與大家交個朋友,分享學習的經驗! ===================引 用 boss.tw 文 章=================== 很棒的技術講座唷 小弟剛好有這榮幸親耳聽到 感謝分享~
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
|
macchen
初階會員 發表:66 回覆:102 積分:33 註冊:2006-07-07 發送簡訊給我 |
|
lau.wang
一般會員 發表:0 回覆:2 積分:0 註冊:2011-12-10 發送簡訊給我 |
蕭大俠:
真的很期待您的Delphi的範例。 因為有一個關於MultiThread的問題困擾我多年,在此想跟你請教一番! 1.在Thread中 call 系統提供的函數 (處理字串的函式:Copy, Format,... Math:Sin, Cos,.... ), 算不算 Thread-Safe? 2.在Thread call 自行寫的函數(例如計算CRC...一些比較耗時的), 算不算 Thread-Safe?會不會有重入的問題? 3.我有寫過一個程式, 使用TClientSocket , D6的環境, OnRead使用同一個事件會不會產生重入的問題? Source Code如下: (這是透過TCP/IP去連結儀器,大約有30個以上) [code delphi] procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:=0 to COMPCount-1 do //i:=17; begin COMX[i]:=TClientSocket.Create(Form1); COMX[i].Host:=ip[i]; COMX[i].Port:=9925; COMX[i].Tag:=i; COMX[i].OnRead:=OnClientSocketRead; end; end; procedure TForm1.OnClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); var len:integer; i:integer; buff:pByte; comm:TClientSocket; ipx:string; begin comm:=TClientSocket(Sender); len:=Socket.ReceiveLength; GetMem(buff,len 1); Socket.ReceiveBuf(RecvBuff,len) ; Response(Sender,@RecvBuff[0],len ); //解析資料和存至資料庫 FreeMem(buff); end; [/code]
------
Delphi !! |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
你好,
因近來忙於自己的新公司事務,所以時間不足,還請見諒! 1/ 使用系統提供的函式,還是有二種可能,不能夠100%確定是安全與否,以 FormatDateTime這個函式來說,它有提供二個版本(overload),其中一個是最後多一個參數叫FormatSettings,這個就是安全的,另一個則是不安全的。 2/ 自行寫的函式,或者是系統的函式,都是要考慮是否有使用全域變數,若有使用,則要看是否有使用criticalsection之類的機制,詳情就要看我的講義,裡面就是有提到關於判別的方式。 3/ 除非你的onread裡有使用到application->processmessage這類的函式,否則不會有重入的情形。因為TClientSocket是使用message event來觸發處理函式,即使你有n個socket,但都還是queue在訊息裡,逐一才會被執行。但若你使用了processmessage這種函式,會破壞queue的順序,如此就會重入。 Response(Sender,@RecvBuff[0],len ); //解析資料和存至資料庫 這行若是跑要花很長的時間(特別指對io很久,非cpu),只會有效率的問題。若在onread裡再起一thread來處理,則respnse的寫法就要合thread-safe。除非有很大的效率問題,且對thread很熟,否則目前的寫法就很好了! ps: 若一切合thread-safe,那麼就不用考慮重入問題。重入問題是決定了是否要處理thread-safe,若是不會重入,當然就不需要處理。但,重入的問題不僅僅會發生在有thread的時時候,只能說多數發生在thread裡。比如上面我講的processmeaage也會有重入的問題。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2012-01-15 19:28:27, 註解 無‧
|
lau.wang
一般會員 發表:0 回覆:2 積分:0 註冊:2011-12-10 發送簡訊給我 |
感謝蕭大俠在百忙之中還抽空回覆, 先祝您新公司生意興隆, 業績蒸蒸日上。
聽您這麼一解釋, 我完全了解,重入大都只會發生在Thread中,只要我的程式在OnRead中不要使用processmessage, 一切就還OK,......但如果我覺得在存入資料庫時發現會有拖慢系統時,才須把資料庫的程序改寫成 Thread,這時才來 考慮thread-safe的事。 最後一點是:關於 "使用系統提供的函式,還是有二種可能,不能夠100%確定是安全與否",此句的意思是要看Help怎麼寫囉! 是否有此情況的在Help都會寫出來嗎? (PS: D6未提供 FormatDateTime overload, 所以只有一個版本。 D7才有,其他的版本未知。) ===================引 用 aftcast 文 章=================== 你好, 因近來忙於自己的新公司事務,所以時間不足,還請見諒! 1/ 使用系統提供的函式,還是有二種可能,不能夠100%確定是安全與否,以 FormatDateTime這個函式來說,它有提供二個版本(overload),其中一個是最後多一個參數叫FormatSettings,這個就是安全的,另一個則是不安全的。 2/ 自行寫的函式,或者是系統的函式,都是要考慮是否有使用全域變數,若有使用,則要看是否有使用criticalsection之類的機制,詳情就要看我的講義,裡面就是有提到關於判別的方式。 3/ 除非你的onread裡有使用到application->processmessage這類的函式,否則不會有重入的情形。因為TClientSocket是使用message event來觸發處理函式,即使你有n個socket,但都還是queue在訊息裡,逐一才會被執行。但若你使用了processmessage這種函式,會破壞queue的順序,如此就會重入。 Response(Sender,@RecvBuff[0],len ); //解析資料和存至資料庫 這行若是跑要花很長的時間(特別指對io很久,非cpu),只會有效率的問題。若在onread裡再起一thread來處理,則respnse的寫法就要合thread-safe。除非有很大的效率問題,且對thread很熟,否則目前的寫法就很好了! ps: 若一切合thread-safe,那麼就不用考慮重入問題。重入問題是決定了是否要處理thread-safe,若是不會重入,當然就不需要處理。但,重入的問題不僅僅會發生在有thread的時時候,只能說多數發生在thread裡。比如上面我講的processmeaage也會有重入的問題。
------
Delphi !! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |