關於Muit-Thread觀念 |
尚未結案
|
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
有個觀念問題想請各位大大幫忙,我有個測試機台搭配一個程式來進行產品測試,程式內容是主程式搭配10個不同計算功能的副程式來使用,而我的問題是:
1.我需要編寫一的程式,再同一台電腦上可同時架設多台測台來測試產品,請問muit-thread的部分應該怎麼架構比較好呢? 2.假如我有2個以上的thread,我需要用到chart VCL元件顯示波形,每個Thread分別都有自己的chart來使用,這樣還需要用Synchronize()防止嗎? 3.假設不同的thread即使有個別的VCL元件一樣需要用Synchronize()來防止,但是我爬文得知用Synchronize()等於排隊執行,這樣無法達到同時效果,請問有什麼方式可以替代嗎?
------
lee |
jesson
一般會員 發表:11 回覆:16 積分:5 註冊:2002-04-21 發送簡訊給我 |
===================引 用 small7011 文 章=================== 有個觀念問題想請各位大大幫忙,我有個測試機台搭配一個程式來進行產品測試,程式內容是主程式搭配10個不同計算功能的副程式來使用,而我的問題是: 1.我需要編寫一的程式,再同一台電腦上可同時架設多台測台來測試產品,請問muit-thread的部分應該怎麼架構比較好呢? 1.個人認為:視其測試電腦的效能為何,再考量到底要開幾個 Thread,以讓電腦CPU不要用得太滿為原則,因為開多個 Thread 測試效率不見得更好。 2.假如我有2個以上的thread,我需要用到chart VCL元件顯示波形,每個Thread分別都有自己的chart來使用,這樣還需要用Synchronize()防止嗎? 2.個人認為:TChart 那是VCL的元件,目的是用來 Display 用,但你要測試的是產品運算效率,因 VCL 元件不支援 Safe-Thread 所以需用到 3.第2點已回覆 |
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
1.等待許久終於有人回答,真的很感謝jesson大的答覆,這是我第一次用thread有許多地方都不懂,目前專案大致上都ok,VCL元件與有可能搶資源地方我也都用Synchronize()來處理,
雖然有些地方我還是沒有搞懂,但還是很謝謝你的答覆. ===================引 用 jesson 文 章=================== ===================引 用 small7011 文 章=================== 有個觀念問題想請各位大大幫忙,我有個測試機台搭配一個程式來進行產品測試,程式內容是主程式搭配10個不同計算功能的副程式來使用,而我的問題是: 1.我需要編寫一的程式,再同一台電腦上可同時架設多台測台來測試產品,請問muit-thread的部分應該怎麼架構比較好呢? 1.個人認為:視其測試電腦的效能為何,再考量到底要開幾個 Thread,以讓電腦CPU不要用得太滿為原則,因為開多個 Thread 測試效率不見得更好。 2.假如我有2個以上的thread,我需要用到chart VCL元件顯示波形,每個Thread分別都有自己的chart來使用,這樣還需要用Synchronize()防止嗎? 2.個人認為:TChart 那是VCL的元件,目的是用來 Display 用,但你要測試的是產品運算效率,因 VCL 元件不支援 Safe-Thread 所以需用到 3.第2點已回覆
------
lee |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
理論上n個thread對n個物件是相對比較安全,因為每個物件的data members是各自的。相對一個物件對n>1的thread時,因data members僅一個實例(instance),所以同時間使用方法進而改變了資料時,就馬上出問題。然而,是否n對n 就安全無疑? 也不一定,還要考慮是否某方法是否有用到全域的變數,若有,n對n也是無法解決共用了全域的共享問題。詳請請參照我部落格上的關於thread安全的文 章。
即使有個別的vcl元件還需要用synchroize嗎? 當然不一定,問題在於它是否有用到全域的變數 (許多vcl都有用全域,在classes.pas裡定義不少),比如TADO的元件就不用synchroize (n對n時)。 synchronize的確是效能差,所以如果可以的話,可以改用TCriticalSection來取代,比如TMemo的Lines.Add前加入這個防止,這個目前我測應該沒問題。當然,有些元件本身就是「一定要synchronize」,你若問我哪些? 我也不能明確的確認。又如bmp,jpg等畫圖的,可以在畫前使用TCanvas.Lock方式。 此外,n對n 的物件創建也是偏"理想化",若是可視元件,一般是不能在子thread中new出來,除非用特殊技巧,讓thread變成ui thread,這太深了,先忘了它。 不過「不可視的」就可以高興一點new看看。 我的blog有二篇,可以參考一下! ===================引 用 small7011 文 章=================== 2.假如我有2個以上的thread,我需要用到chart VCL元件顯示波形,每個Thread分別都有自己的chart來使用,這樣還需要用Synchronize()防止嗎? 3.假設不同的thread即使有個別的VCL元件一樣需要用Synchronize()來防止,但是我爬文得知用Synchronize()等於排隊執行,這樣無法達到同時效果,請問有什麼方式可以替代嗎?
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |