![]() |
[Artikel] Wann wird ein Prozess terminiert?
Und wieder gibt es einen neuen Artikel auf meiner Homepage:
![]() Dies mal geht es darum, wann ein Prozess unter Windows beendet wird und wann nicht. Fehler, Ungenauigkeiten oder Unklarheiten kann man übrigens Micosoft melden. Man bekommt dann ein Feedback auf seine Meldung und eventuell wird die Dokumentation auch korrigiert, wenn es Microsoft für nötig hält. Microsoft hat sich diesbezüglich in den letzten Jahren wohl gewandelt und Feedback von Entwicklern ist erwünscht und wird auch berücksichtig. Was ich für sehr wichtig halte und auch sehr begrüße. |
Re: [Artikel] Wann wird ein Prozess terminiert?
Zitat:
Wie ist das zu verstehen?? Wenn ich einen Fehler in deinem Artikel finde, soll ich Microsoft Bescheid geben??? :shock: |
Re: [Artikel] Wann wird ein Prozess terminiert?
In der Doku steht "The primary thread of the process returns.". Ich habe allerdings die Erfahrung gemacht, dass dies nicht immer zutrifft (so wie im Artikel beschrieben :)). Wenn man eine eigene RTL ohne ExitProcess schreibt, dann kann der Prozeß hängen bleiben obwohl der Hauptthread endet. Zum Beispiel, wenn man diverse Shell-Funktionen (insbes. Dialoge) verwendet hat.
Womit wir beim nächsten Punkt wären. Beim Beenden eines Delphi-Programmes wird (edit: soweit ich mich erinnere :)) ExitProcess aufgerufen (System.@Halt0). |
Re: [Artikel] Wann wird ein Prozess terminiert?
Zitat:
|
Re: [Artikel] Wann wird ein Prozess terminiert?
Da hast sogar Recht Lucky ;)
Habs mal eben getestet, wenn es jemanden interessiert kann ich davon ein kleines Video machen. Erst wenn alle Threads beendet sind beendet ein NT System den Prozess, da aber Delphi7 z.b. im Hauptthread ExitProcess aufruft wird das Programm beendet. Scheint dann wirklich (wie Lucky sagt) an Delphi6 liegen. Und die Dokumentation ist nicht richtig. Sollte nur mal ne Bestätigung sein, beweisen kann ich es auch ^^ |
Re: [Artikel] Wann wird ein Prozess terminiert?
Oh ja. mach mal ein Video, das kann ich dann zum Download anbieten - natürlich mit deinem Einverständnis. ;)
|
Re: [Artikel] Wann wird ein Prozess terminiert?
Zitat:
Hiermit kann ich es nicht nachvollziehen (Delphi 6 Professional, Update Pack 2, RTL Update 3)
Delphi-Quellcode:
unit Unit1;
interface uses Classes, Forms; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} uses Windows; function ThreadFunc(Parameter: Pointer): Integer; var Event: THandle; begin Event := CreateEvent(nil, True, False, nil); if 0 = Event then MessageBox(0, 'Event not created!', 'Test', MB_ICONERROR) else try // Shouldn't return... WaitForSingleObject(Event, INFINITE); finally CloseHandle(Event); end; MessageBox(0, 'Leaving ThreadFunc', 'Test', MB_ICONINFORMATION); Result := 0; end; procedure TForm1.FormCreate(Sender: TObject); var Thread: THandle; ThreadId: DWORD; begin Thread := BeginThread(nil, 0, ThreadFunc, nil, 0, ThreadId); if 0 = Thread then MessageBox(0, 'Thread not created!', 'Test', MB_ICONERROR) else try MessageBox(0, 'Thread created.', 'Test', MB_ICONINFORMATION); finally CloseHandle(Thread); end; end; end. |
Re: [Artikel] Wann wird ein Prozess terminiert?
Ich bringe am Montag mal dss Projekt mit.
|
Re: [Artikel] Wann wird ein Prozess terminiert?
Liste der Anhänge anzeigen (Anzahl: 1)
So, da bin ich wieder. Wenn ich die Thread-Klasse im Anhang benutze, dann wird der Prozess definitiv nicht beendet bei mir.
|
Re: [Artikel] Wann wird ein Prozess terminiert?
Edit: hat sich erledigt :)
Allerdings kann ich das Problem (hängender Prozess) immer noch nicht nachvollziehen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 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