こんにちわ 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
わたしは、TIdTCPServerを親に持つTIdHTTPServerを使用することがありますが、スレッドの開放を行わなくても問題なく稼動しています。 そこでTIdHTTPServerのコードを追跡してどのようにこなしているか見てみてはいかがでしょうか? KeepAliveなんか結構怪しいような気がするのですが…
ツイート | ![]() |