Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   [Artikel] Wann wird ein Prozess terminiert? (https://www.delphipraxis.net/65012-%5Bartikel%5D-wann-wird-ein-prozess-terminiert.html)

Luckie 11. Mär 2006 03:54


[Artikel] Wann wird ein Prozess terminiert?
 
Und wieder gibt es einen neuen Artikel auf meiner Homepage: Wann wird ein Prozess terminiert?

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.

Chewie 11. Mär 2006 13:45

Re: [Artikel] Wann wird ein Prozess terminiert?
 
Zitat:

Zitat von Luckie
Fehler, Ungenauigkeiten oder Unklarheiten kann man übrigens Micosoft melden.


Wie ist das zu verstehen?? Wenn ich einen Fehler in deinem Artikel finde, soll ich Microsoft Bescheid geben??? :shock:

NicoDE 11. Mär 2006 14:08

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).

Luckie 11. Mär 2006 15:01

Re: [Artikel] Wann wird ein Prozess terminiert?
 
Zitat:

Zitat von NicoDE
Womit wir beim nächsten Punkt wären. Beim Beenden eines Delphi-Programmes wird (edit: soweit ich mich erinnere :)) ExitProcess aufgerufen (System.@Halt0).

Wie gesagt, Delphi 6 Professional und Hauptfenster geschlossen und der Prozess war noch da im Taskmanager. Also wurde er doch nicht beendet.

brechi 11. Mär 2006 15:47

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 ^^

Luckie 11. Mär 2006 16:46

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. ;)

NicoDE 11. Mär 2006 17:09

Re: [Artikel] Wann wird ein Prozess terminiert?
 
Zitat:

Zitat von Luckie
Wie gesagt, Delphi 6 Professional und Hauptfenster geschlossen und der Prozess war noch da im Taskmanager.

Etwas Code könnte nicht schaden.

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.

Luckie 11. Mär 2006 17:18

Re: [Artikel] Wann wird ein Prozess terminiert?
 
Ich bringe am Montag mal dss Projekt mit.

Luckie 13. Mär 2006 08:10

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.

NicoDE 13. Mär 2006 09:16

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 14:50 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz