Newsgroups : Borland : borland.public.delphi.internet.winsock : 2007 Apr : connection closed gracefully form close problem
| Subject: | connection closed gracefully form close problem |
| Posted by: | "mustafa korkmaz" (mustafakorkm..@gmail.com) |
| Date: | 3 Apr 2007 12:40:04 |
if I close my client application while it be connected to server I can close application
without any error.
But when the server close client connection than if I try to close client application this exception
message appears: raise exception class Ewin32Error with message 'Win32 Error. code:1400. Invalid window handle'
And this program can be closed only from task manager-end task.
This close problem occurs only when connection closed gracefully..
If connection has been closed by server.Not occur if connection has been closed by client.
TClientThread = class(TThread)
private
firtbyte: byte;
protected
.........
Constructor Create( dontnow: boolean );
procedure Execute; override;
end;
.........
var
frmOkeyMainform: TfrmOkeyMainform;//main application form
...........
constructor TClientThread.Create( dontnow: boolean );
begin
FreeOnTerminate := True;
inherited Create( dontnow );
end;
procedure TClientThread.UseFormcomponents;
var c: char;
begin
if firstbyte = 45 then
begin
frmOkeyMainform.TcpClient.ReadBuffer( c, sizeof( char ) );
.....
//use visual components
end
else
if firstbyte = 46 then
..........
end;
procedure TClientThread.Execute;
begin
while ( not Terminated ) and ( frmOkeyMainform.exitplease = false ) do
begin
try
if not frmOkeyMainform.TcpClient.Connected then Terminate
else
try
frmOkeyMainform.TcpClient.ReadBuffer( firstbyte, SizeOf ( firstbyte ) );
Synchronize( UseFormcomponents );
except
end;
except
Terminate;
end;
end;
end;
....................Main application program............
procedure TfrmOkeyMainform.Myconnect;
begin
try
TcpClient.Connect( 20000 );
TClientThread.Create( false );
....
except
end;
end;
procedure TfrmOkeyMainform.TcpClientDisconnected(Sender: TObject);
begin
Label1.caption := 'Disconnect';
end;
procedure TfrmOkeyMainform.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
exitplease := true;
try
if TcpClient.connected then TcpClient.Disconnect;
except
end;
........
end;
Delphi 5
Indy version is 9.0.18