TClientSocket Threads im Taskmanager werden falsch gezählt?



  • Hi,

    ich hab in einem TFrame einen ClientSocket abgelegt.

    Wenn ich meine Anwendung starte, wird für die EXE 1 Thread im Windows Taskmanager angezeigt. (= thread fürs Hauptformular bzw. die Anwendung)

    Wenn ich also einen Frame erzeuge und den ClientSocket verbinden lasse, wird der Threadcounter vom Taskmanager um 2 erhöht - soweit so gut.

    Wenn ich den Socket dann trenne, bleibt der Threadcounter weiterhin bei 3 😮

    Dazu kommt, wenn ich ein weiteres TFrame erzeuge und den "zweiten" Socket verbinde, sollte eigentlich (?) der Threadcounter erneut erhöht werden, wird er allerdings nicht. Ist ein TFrame dafür nicht geeignet?

    Beide Socket Verbindungen funktionieren scheinbar, zumindest wenn ich auf meinen kleinen Mini Test-Server verbinde der dem ClientSocket Daten sendet.

    Der Miniserver ist recht minimalistisch gehalten, ich starte ihn einfach mehrfach und ändere einfach den Port. Dazu ein Timer über den ich dann via den ServerSocket einen String an den verbundenen Client sende. Der ClientSocket im jeweiligen Frame wertet dann die Daten im OnRead aus und schreibt sie in ein Memo.

    Warum erzeugt der ClientSocket eigentlich 2 Threads? Sollte 1 Thread normal nicht reichen? Oder ist der zweite für das "OnSend" Ereignis?

    Danke!

    €dit

    Das "Phänomen" tritt unter XP SP3 bzw. Vista SP2 auf. Benutze nach wie vor Turbo 2006.



  • Maverick schrieb:

    Wenn ich also einen Frame erzeuge und den ClientSocket verbinden lasse, wird der Threadcounter vom Taskmanager um 2 erhöht - soweit so gut.

    Wenn ich den Socket dann trenne, bleibt der Threadcounter weiterhin bei 3 😮

    Dazu kommt, wenn ich ein weiteres TFrame erzeuge und den "zweiten" Socket verbinde, sollte eigentlich (?) der Threadcounter erneut erhöht werden, wird er allerdings nicht. Ist ein TFrame dafür nicht geeignet?

    Threads erstellen ist teuer, entsprechend scheinen die Socket-Komponenten ihre Threads zu recyclen.

    Maverick schrieb:

    Warum erzeugt der ClientSocket eigentlich 2 Threads? Sollte 1 Thread normal nicht reichen? Oder ist der zweite für das "OnSend" Ereignis?

    Das ist ein Implementationsdetail, das du ganz hervorragend selbst im Quelltext nachlesen kannst.



  • [quote="audacia"]Threads erstellen ist teuer, entsprechend scheinen die Socket-Komponenten ihre Threads zu recyclen.

    Hmmm, und wie krieg ich die Threads dann los? Sehe ich das richtig, dass die Komponente sozusagen nur 1x erzeugt wird und der Threadmanager dann alle Sockets "versorgen" kann?

    audacia schrieb:

    Das ist ein Implementationsdetail, das du ganz hervorragend selbst im Quelltext nachlesen kannst.

    Kannst du mir sagen in welcher Zeile das stehen soll? So ganz werd ich da nicht schlau draus... zumindest finde ich nicht "die" entsprechenden Teile die du scheinbar meinst 😞



  • Maverick schrieb:

    Hmmm, und wie krieg ich die Threads dann los?

    Warum sollte man sie loswerden wollen? Wenn die Socketkomponenten die Threads cachen wollen, dann laß sie doch.

    audacia schrieb:

    Kannst du mir sagen in welcher Zeile das stehen soll?

    Nein, aber die Datei suche ich dir gerne heraus: $(BDS)\source\Win32\vcl\ScktComp.pas.



  • audacia schrieb:

    Nein, aber die Datei suche ich dir gerne heraus: $(BDS)\source\Win32\vcl\ScktComp.pas.

    Ich weiss in welcher Datei die Komponente ist... Die Kommentare im Source sind sehr hilfreich. [/ironie]


Anmelden zum Antworten