Hi,
ich habe folgenden Code:
Thread-
Unit:
Delphi-Quellcode:
TCsThread = class(TThread)
private
Cs: TClientSocket;
FHost: string;
FIPort: Integer;
procedure OnClientR(Sender:TObject;Sock:TCustomWinSocket);
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean);
destructor Destroy; override;
property Host: String read FHost write FHost;
property Port: Integer read FIPort write FIPort;
procedure shutdown;
end;
procedure TCsThread.shutdown;
begin
PostQuitMessage(0);
end;
destructor TCsThread.Destroy;
begin
Cs.Free;
inherited Destroy;
end;
constructor TCsThread.Create;
begin
inherited Create(True);
Cs := TClientSocket.Create(nil);
cs.OnRead:=OnClientR;
end;
procedure TCsThread.Execute;
begin
cs.Host:=Host;
cs.Port:=Port;
Cs.Active:=true;
while GetMessage(Msg, 0, 0, 0) do //hier der Fehler
begin
DispatchMessage(Msg);
end;
end;
Main-Form:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
cs:TCsThread;
begin
Cs:=TCsThread.Create(true);
Cs.host:='127.0.0.1';
Cs.port:=1000;
cs.FreeOnTerminate:=true;
cs.Resume;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
cs.shutdown;
end;
Sobald ich shutdown aufrufe bekomme ich folgenden Fehler:
Zitat:
Erste Gelegenheit für
Exception bei $75683843.
Exception-Klasse EAccessViolation mit Meldung '
Access violation at address 00000000. Read of address 00000000'. Prozess PrjCSThread.exe (3344)
aber wenn ich PostQuitMessage so aufrufe gibt es kein Problem das möchte ich aber nicht so sondern von der Main-Form ausgehen:
Delphi-Quellcode:
procedure TCsThread.OnClientR(Sender:TObject;Sock:TCustomWinSocket);
begin
PostQuitMessage(0);
end;
mfg
gandime