![]() |
HauptThread eines Processes
huhu...
gibt es eine Möglichkeit den MainThread einer Anwendung zu ermitteln? Ich würde "möglichst" sauber eine Anwendung beenden wollen. Auf TerminateProcess will ich dabei nicht zurückgreifen... TIA Shalom |
Re: HauptThread eines Processes
Man könnte doch mit "CreateToolhelp32Snapshot()" alle Threads eines Processes ermitteln und eventuell anhand der ThreadId den MainThread ermitteln (müsste ja der mit der gerinsten Id sein, or??)
Leider scheint das erst ab W2k zu funken (laut msdn)... Naja, werd das mal ausprobieren - später... Fals noch jemand ne alternative Möglichkeit kennt, bitte posten :) Shalom |
Re: HauptThread eines Processes
Für die Enumerierung von Threads auf NT 4.x (und evtl. 3.x) Systemen fallen mir 2 Möglichkeiten ein:
PDH ( ![]() ![]() Davon abgesehen halt ich dein Vorhaben für ziemlich sinnbefreit. TerminateProcess ist letztlich die Methode, mit der Windows alle Prozesse terminiert. Auch wenn Du alle Threads terminierst, wird Windows zum beenden des Prozesses letztlich TerminateProcess aufrufen. Also wieso nicht gleich benutzen? Achja ... soetwas wie einen "MainThread" gibt es meines Wissens nach nicht wirklich. Ein Prozess ist so lange aktiv, bis alle Threads beendet wurden. Also selbst wenn Du den ersten Thread terminierst, rennt die Anwendung brav weiter sofern noch andere Threads existieren. Kann mich da aber durchaus irren. Bin grad dabei mich vom Umzugsstreß zu erholen und hab ne Weile nicht gepennt ;). |
Re: HauptThread eines Processes
ich weiß,
der Gedanke war der, dass wenn der Thread der die Hauptnachrichtenschleife beinhaltet eine WM_Close empfängt <müsste> ja eigentlich die Anwendung sauber beendet werden - wenn keine Dialoge "im Weg stehen"... Terminieren will ich den Thread ja nicht, nur eine Message senden.... :wink: Shalom |
Re: HauptThread eines Processes
notfalls sende doch WM_CLOSE einfach an alle Threads der Anwendung :stupid:
Aber geh lieber über TerminateProcess, den WM_CLOSE wird auch nur von der Nachrichtenschleife verarbeitet und letztendlich wird wieder TerminateProcess aufgerufen. PS: ein DelphiProgramm beendet nur die Anwendung, wenn WM_CLOSE über das MainForm eingeht. Also wenn WM_CLOSE ohne Form (nur direkt an Nachrichtenschleife gesendet), oder wenn WM_CLOSE an Nicht-MainForm sollte keine Delphi-Anwendung beenden. |
Re: HauptThread eines Processes
Zitat:
Zitat:
So gesehen, gibt es keine sichere und saubere Möglichkeit einen fremden Prozess zu beenden. Stellt sich die Frage, ob das denn wirklich notwendig ist. Und wenn es wirkölich notwendig ist, sollte man das nur im Notfall machen. Siehe dazu die Anmerkungen aus dem SDK: Zitat:
|
Re: HauptThread eines Processes
Zitat:
Fensternachrichten ala PostMessage gelangen in die MessageQueue des Threads in dem das Fenster erstellt wurde (oder womit das Fenster verknüpft wurde) und SendMessage geht direkt an die Fensterprozedur. |
Re: HauptThread eines Processes
Zitat:
|
Re: HauptThread eines Processes
Ich denk mal die arme Nachricht versauert dort, bis das Programm beendet wird. :cry:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz