Hallo Mathias!
Vielen Dank erstmal für Deine Hilfe.
Ich hatte bereits eine Execute-Methode definiert, wollte nur aus Platzgründen nicht alles in diesen Artikel schreiben.
In meiner Hauptform (Form1) habe ich eine ButtonClick-Methode
procedure TForm1.Button1Click(Sender: TObject);
begin
TMyThread.Create(SELF);
end;
meine Unit mit dem Thread sieht wie folgt aus …
als host habe ich mit absicht „noname“ genommen, damit
der socket zwangsläufig in einen Fehler läuft, denn „noname“ gibt es nicht…
unit Unit2;
interface
uses classes, scktcomp, Dialogs;
type
TMyThread = class(TThread)
private
CS : TClientSocket;
DataTransmitted : Boolean;
procedure ShowMSG;
procedure CSError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure Execute; override;
public
constructor Create(Owner : TComponent);
destructor Destroy; override;
end;
implementation
constructor TMyThread.Create;
begin
inherited Create(FALSE);
CS := TClientSocket.Create(Owner);
CS.ClientType := ctBlocking;
CS.OnError := CSError;
DataTransmitted := FALSE;
end;
procedure TMyThread.ShowMSG;
begin
ShowMessage(‚Error‘);
end;
procedure TMyThread.CSError;
begin
Synchronize(ShowMSG);
ErrorCode := 0;
DataTransmitted := TRUE;
Terminate;
end;
procedure TMyThread.Execute;
begin
CS.Host := ‚noname‘;
CS.Port := 3500;
CS.Active := TRUE;
repeat until Terminated or DataTransmitted;
CS.Active := FALSE;
end;
destructor TMyThread.Destroy;
begin
CS.Destroy;
inherited Destroy;
end;
end.
Tja, es funktioniert immer noch nicht.
Es kommt weiterhin eine ESocketError-Meldung und ShowMessage
wird auch nicht ausgeführt, was allerdings nicht so schlimm ist.
Ich habe das Gefühl, das die zugeordnete Methode für das Event
OnError einfach nicht ausgeführt wird.
Kann es sein, das Sockets, so ich wie ich sie verwenden möchte
nicht Thread-geeignet sind?
Weisst Du zufällig ob es dazu irgendwo im Netz Literatur oder
Beispiele gibt?
Falls es Dir eventuell weiterhelfen sollte :
ich benutze Delphi 4 Pro auf Win2K
Gruß Dennis