Der Martin: Win32-API: CreateThread(), Threads koordinieren

Beitrag lesen

Hallo Rolf,

Sellerie-Schnittstelle

Prust 😀🤣

kanntest du das noch nicht?? Das spielen sie in Holland doch schon auf der Luftpumpe.

Grundsätzlich kann dieses Verhalten ja Absicht sein, dass ein Prozess sein Hauptprogramm beendet und nur im Hintergrund noch herummacht.

Ja, dafür kann ich mir auch sinnvolle Szenarien vorstellen. Aber das würde ich dann eher so lösen, dass der Hauptprozess noch kontrolliert in seiner Message-Loop rumrennt und nur sein Fenster schließt. Dann hätte er (vom Berechtigungsstatus abgesehen) den Status eines Services.

Ich hätte gedacht, wenn der Thread noch ein paar Sekunden läuft, dann verzögert sich halt auch das Beenden des Hauptprozesses.

Ist das so? Endet der Thread?

Das sollte er zumindest. Wie gesagt, das läuft in einer "frei fliegenden" DLL und ist deshalb schwierig zu debuggen. Aber der Thread arbeitet nur eine endliche Queue von WriteFile() und ReadFile() ab, jedesmal mit Timeout, so dass diese Aufrufe nach ein paar 100ms zurückkehren, notfalls auch erfolglos.

Oder ist er vielleicht noch aktiv und wartet auf irgendwas? Solange der auf weiteren Sellerie wartet, dürfte er nicht zu Ende sein.

Das ist klar, aber das gibt die Programmlogik eigentlich nicht her.

Ich habe hier mal nachgelesen. Da stehen einige Hinweise am Ende. Betrifft Dich davon irgendwas?

Diesen Abschnitt der Winapi-Doku habe ich schon gelesen. Der einzige Satz, den ich im Hinblick auf dieses Problem für interessant halte, ist dieser:

ExitProcess does not complete until there are no threads in their DLL initialization or detach routines.

Das lese ich so, dass ExitProcess() implizit das Beenden von Threads abwartet, die in DllMain() gestartet wurden. Bei mir wird der Thread aber nicht schon beim Initialisieren der DLL (also nicht in DllMain()) gestartet, sondern erst bei Bedarf aus einer "gewöhnlichen" exportierten Funktion heraus.

Anyway, ich habe das inzwischen umgebaut und warte beim Beenden des Programms nun explizit ab, bis der Thread sich ordnungsgemäß verabschiedet hat. Ich komme aber frühestens heute nachmittag wieder ans Live-System zum Testen.

Live long and pros healthy,
 Martin

--
Home is where my beer is.