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

這用多執行緒有辦法解決嗎?

尚未結案
MichaelChien
一般會員


發表:33
回覆:37
積分:14
註冊:2002-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-12 16:38:26 IP:211.76.xxx.xxx 未訂閱
MyServer.Socket.Connections[0].SendText('123'); TimeOut = 4; TimeNow := Now; Rev := ''; While StrToInt(FormatDateTime('ss', Now - TimeNow)) < TimeOut do begin Rev := MyServer.Socket.Connections[0].ReceiveText; if Rev <> '' then Break; end; 說明: 假設有一硬體設備,當PC送出'123',它會回你'456',但如果它超過TimeOut, 就當作它斷線或故障。 問題: 當有很多此類設備時(比如說:10個),如果全部斷線,當我一一詢問時, 它總共要浪費40秒(TimeOut=4秒)的時間,這個時間當中整個電腦幾乎不能 做其它的事,因為在做迴圈(等待回應),這樣的效率太差了,有其它辦法 可以解決嗎?多執行緒能改善嗎? 備註: 我現在已經把需要詢問的動作獨立出一支小程式,常駐在背景執行,但當 它在等待回應時,主程式依舊會受到它的影響,無法做其它的動作。
pental
初階會員


發表:3
回覆:48
積分:30
註冊:2003-09-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-12 17:11:49 IP:203.74.xxx.xxx 未訂閱
我覺得可以把每個設備的檢查都用一個 Thread 來做,應該情況會好些!
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-12 17:20:39 IP:61.221.xxx.xxx 未訂閱
MichaelChien 你好: 正所謂羊毛出在羊身上 這個時間當中整個電腦幾乎不能 做其它的事,因為在做迴圈(等待回應) 如果電腦效能是因為硬體的關係,那...多不多序都不是問題!! 你可以在迴圈中加入 Application.ProcessMessages; 試一試
------
======================
昏睡~
不昏睡~
不由昏睡~
pental
初階會員


發表:3
回覆:48
積分:30
註冊:2003-09-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-12 23:03:02 IP:61.30.xxx.xxx 未訂閱
我覺得是不是可以用 Timer 來做Timeout的檢查,當你送出查詢字串時,就啟動Timer,如果有回應的話,那 ServerSocket 是會有事件觸發的,如果 OnTimer 觸發時,表示 TimeOut,這樣子你的程式的 Loading 就會變得很小了!
MichaelChien
一般會員


發表:33
回覆:37
積分:14
註冊:2002-12-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-13 00:31:46 IP:211.76.xxx.xxx 未訂閱
請問ko: Application.ProcessMessages; 加入這一行有什麼用處嗎?
spencerkuo
一般會員


發表:21
回覆:34
積分:11
註冊:2003-08-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-15 23:41:01 IP:203.204.xxx.xxx 未訂閱
引言: 請問ko: Application.ProcessMessages; 加入這一行有什麼用處嗎?
可以把控制權還回給application, 讓你的 application 可以做其他的事情, 而不會被凍結
系統時間:2024-06-29 15:54:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!