Newsgroups : Borland : borland.public.delphi.internet.winsock : 2007 Apr : connection closed gracefully form close problem

www.cryer.info
Managed Newsgroup Archive

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

Replies:

www.cryer.info
Managed Newsgroup Archive