線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2120
推到 Plurk!
推到 Facebook!

如何關閉多于的冗餘連接?關于TIDTCPServer的。

答題得分者是:careychen
zhgwbzhd
一般會員


發表:10
回覆:32
積分:18
註冊:2008-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-28 10:57:24 IP:221.218.xxx.xxx 未訂閱
IdTCPServer是不是已經記錄了他目前的所有鏈接?
我會在某時全部清空這些鏈接。
我覺得是不是可以直接通過他的某些成員就可以讀到這些鏈接。之后關閉他們。

目前我採用的方法是用一個列錶,在connect時,記錄下來,在disconnect時刪除。但是會佔用一些資源。

另外在多CPU的機器上,在ADD或者Delete時可能會出問題的,這個如何避免??

不知道有沒有更好的方法?

謝謝各位!
編輯記錄
zhgwbzhd 重新編輯於 2008-09-28 11:06:03, 註解 無‧
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-09-28 14:55:45 IP:59.126.xxx.xxx 訂閱
HI, 我是這樣子寫的,您參考一下

Indy 9
[code delphi]
var I: Integer;
List: TList;
begin
with IdTCPServer1.Threads do
begin
List := LockList;
try
try
for I := List.Count-1 downto 0 do
TIdPeerThread(List[I]).Connection.Disconnect;
except
end;
finally
UnlockList;
end;
end;
end;
[/code]

Indy 10
[code delphi]
var I: Integer;
List: TList;
begin
with IdTCPServer1.Contexts do
begin
List := LockList;
try
try
for I := List.Count-1 downto 0 do
TIdContext(List[I]).Connection.Disconnect;
except
end;
finally
UnlockList;
end;
end;
end;
[/code]

不過,請注意一項事情
此項方式會觸發 IdTCPServer 的 OnDisconnect 事件,如果裡面也有寫類似上面的 LockList 的話
將會造成互相咬死的狀況哦~~,你的程式就會出現白白一片了!!

===================引 用 zhgwbzhd 文 章===================
IdTCPServer是不是已經記錄了他目前的所有鏈接?
我會在某時全部清空這些鏈接。
我覺得是不是可以直接通過他的某些成員就可以讀到這些鏈接。之后關閉他們。

目前我採用的方法是用一個列錶,在connect時,記錄下來,在disconnect時刪除。但是會佔用一些資源。

另外在多CPU的機器上,在ADD或者Delete時可能會出問題的,這個如何避免??

不知道有沒有更好的方法?

謝謝各位!
------
價值的展現,來自於你用哪一個角度來看待它!!
編輯記錄
careychen 重新編輯於 2008-09-28 14:59:14, 註解 無‧
zhgwbzhd
一般會員


發表:10
回覆:32
積分:18
註冊:2008-07-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-20 16:09:08 IP:221.218.xxx.xxx 未訂閱
謝謝哦!

我現在也在採用類似的方法,先把這個綫程記錄在 列錶內。之后再刪除。
系統時間:2024-11-21 19:41:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!