TIdTCPServerでThreadがFreeできない?


OC  2006-04-30 08:42:05  No: 21257

こんにちわ  OCと申します

TIdTCPServerでソケット通信をおこなっているのですが
コネクトをして、メッセージの送受信まではうまくいっているのですが
実際に送受信するメッセージは短文なのですぐに切断をサーバ側からしようとしています。
それでDisconnectイベントの中でThreadをFreeしようとしているのですが
エラーもでずにそこでだんまりになってしまいます。
スレッド数に上限を設定していないので新たに接続しようとすれば
再び新規スレッドで接続するので処理自体はおこなえるのですが
Freeできないまま残ったスレッドがどんどんたまって
どんどんメモリを圧迫していきます。

具体的には以下のようにしているのですが
なぜFreeできないのか、どのようにすべきなのかがわかりません

procedure TServerFrmMain.ServerConnect(AThread: TIdPeerThread);
begin

  LogList.Lines.Add(TimeToStr(Time)+' SQLリクエストを受け付けました');

end;

procedure TServerFrmMain.ServerExecute(AThread: TIdPeerThread);
begin

  AThread.Connection.Disconnect;

end;

procedure TServerFrmMain.ServerDisconnect(AThread: TIdPeerThread);
begin

  AThread.Free;

  LogList.Lines.Add (TimeToStr(Time)+' リクエストを完了しました');
  
end;

なにかヒントがつかめればと思い
投稿させて頂きました

よろしくお願いします

------------------------------------------------
動作環境
Win2K Pro.
Delphi6pro. Up4
indy 9.0.18


参考までに  2006-05-02 23:05:56  No: 21258

わたしは、TIdTCPServerを親に持つTIdHTTPServerを使用することがありますが、スレッドの開放を行わなくても問題なく稼動しています。  そこでTIdHTTPServerのコードを追跡してどのようにこなしているか見てみてはいかがでしょうか?  KeepAliveなんか結構怪しいような気がするのですが…


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加