Synchronize af streng
Jeg har en streng, se neden under med tilhørende hovedprogram.
Mit problem er når jeg har en fejl i tråden og ønsker at sende den til hovedprogrammet i denne kode:
inherited;
try
ClientSocket.Connect;
except
FOnErrorEvent('Could not connect to IP: '+IPNo+':'+IntToStr(Port));
Exit;
end;
if ClientSocket.Connected then
FOnStatusEvent('Connected');
Når jeg efterfølgende lukker programmet så får jegn EOS Error Code 1400 når jeg lukker mit program, jeg går ud fra at det er fordi at jeg mangler en synchronize. Hvordan gøres dette ???
Tråden ser således ud:
unit tLogOn;
interface
uses
Classes, Dialogs, Controls, SysUtils, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;
type
TStatusEvent = procedure(Status : String) of object;
TErrorEvent = procedure(Error : String) of object;
TLogOnController = class (TThread)
private
FOnStatusEvent : TStatusEvent;
FOnErrorEvent : TErrorEvent;
procedure SetOnStatusEvent(const Value: TStatusEvent);
procedure SetOnErrorEvent(const Value: TErrorEvent);
protected
procedure Execute; override;
public
ClientSocket : TIdTCPClient;
IPNo : String;
Port : Integer;
Constructor Create;
Destructor Destroy; override;
property OnStatusEvent : TStatusEvent read FOnStatusEvent write SetOnStatusEvent;
property OnErrorEvent : TErrorEvent read FOnErrorEvent write SetOnErrorEvent;
end;
implementation
constructor TLogOnController.Create;
begin
inherited Create(true);
FreeOnTerminate := True;
end;
destructor TLogOnController.Destroy;
begin
inherited;
end;
procedure TLogOnController.execute;
begin
inherited;
try
ClientSocket.Connect;
except
FOnErrorEvent('Could not connect to IP: '+IPNo+':'+IntToStr(Port));
Exit;
end;
if ClientSocket.Connected then
FOnStatusEvent('Connected');
end;
procedure TLogOnController.SetOnStatusEvent(const Value: TStatusEvent);
begin
FOnStatusEvent := Value;
end;
procedure TLogOnController.SetOnErrorEvent(const Value: TErrorEvent);
begin
FOnErrorEvent := Value;
end;
end.
Og Hovedprogrammet:
unit uSyncronize;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient;
type
TForm1 = class(TForm)
Button1: TButton;
StatusBar1: TStatusBar;
IdTCPClient1: TIdTCPClient;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WriteStatus(Status : String);
procedure WriteError(Error : String);
end;
var
Form1: TForm1;
implementation
uses tLogOn;
{$R *.dfm}
var
LogOnTread : TLogOnController;
procedure TForm1.Button1Click(Sender: TObject);
begin
With LogOnTread do
begin
LogOnTread := TLogOnController.Create;
OnStatusEvent := WriteStatus;
OnErrorEvent := WriteError;
IPNo := '192.168.1.3';
Port := 800;
Resume;
end;
end;
procedure TForm1.WriteError(Error: String);
begin
ShowMessage(Error);
end;
procedure TForm1.WriteStatus(Status: String);
begin
StatusBar1.Panels[0].Text := Status;
end;
end.
