Hallo zusammen,
ich spiele im Moment ein bisschen mit den Sockets rum, die ich via
WinAPI anspreche. Ich habe mir eine Klasse geschrieben, die die Serverfunktionalität kapseln soll. Bisher habe ich ein Objekt der Klasse in einem Thread erzeugt, der somit beschäftigt war Daten zu empfangen. Der Code hat dabei wunderbar funktioniert. Nun möchte ich aber innerhalb dieses Objekts einen Thread starten, der sich um das Empfangen der Nachrichten kümmert. Ziel ist, dass man so ein Objekt der Klasse dann auch "parallel" zum senden nutzen können soll.
Ich bin dann einfach so vorgegangen, dass ich eine Methode hinzugefügt habe die das Empfangen starten soll. Diese ezeugt einen Thread, der wiederum die bisherige Methode zum empfangen aufruft. Ich bin also vorgegangen wie es Sir Thornberry hier vorgeschlagen hat:
http://www.delphipraxis.net/internal...=758329#758329
Bei mir sieht das ganze so aus:
Delphi-Quellcode:
procedure TMyTCPServer.BindServer(Port: Integer);
begin
...
FListenThreadHandle := BeginThread(nil, 0, @MyTCPServerListenThread, Self, 0, FListenThreadId);
...
end;
function MyTCPServerListenThread(Param: Pointer): Integer;
begin
TMyTCPServer(Param).ListenThread;
Result := 0;
end;
...
Mein Problem: Mir fliegt nun dauernd das Programm innerhalb von ListenThread um die Ohren und ich kann nicht wirklich ausmachen warum. ListenThread wurde bisher einfach direkt aufgerufen und wurde nicht verändert. Mir ist bewusst, dass ich im Unterschied zu vorher schreibende Zugriffe auf Variablen des Objekts synchronisieren müsste aber diese finden gar nicht statt.
Ich gehe daher davon aus, das etwas mit dem Threadkram nicht stimmt... nur was?
Gruß Mr_G