AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials [Artikel] Wann wird ein Prozess terminiert?
Tutorial durchsuchen
Ansicht
Themen-Optionen

[Artikel] Wann wird ein Prozess terminiert?

Ein Tutorial von Luckie · begonnen am 11. Mär 2006 · letzter Beitrag vom 14. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie
Registriert seit: 29. Mai 2002
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.
Ein Teil meines Codes würde euch verunsichern.
 
Chewie

 
Turbo Delphi für Win32
 
#2
  Alt 11. Mär 2006, 13:45
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???
Martin Leim
  Mit Zitat antworten Zitat
NicoDE
 
#3
  Alt 11. Mär 2006, 14:08
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).
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#4
  Alt 11. Mär 2006, 15:01
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.
Michael
  Mit Zitat antworten Zitat
brechi
 
#5
  Alt 11. Mär 2006, 15:47
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 ^^
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#6
  Alt 11. Mär 2006, 16:46
Oh ja. mach mal ein Video, das kann ich dann zum Download anbieten - natürlich mit deinem Einverständnis.
Michael
  Mit Zitat antworten Zitat
NicoDE
 
#7
  Alt 11. Mär 2006, 17:09
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#8
  Alt 11. Mär 2006, 17:18
Ich bringe am Montag mal dss Projekt mit.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#9
  Alt 13. Mär 2006, 08:10
So, da bin ich wieder. Wenn ich die Thread-Klasse im Anhang benutze, dann wird der Prozess definitiv nicht beendet bei mir.
Angehängte Dateien
Dateityp: pas regnotifiercls_153.pas (3,0 KB, 8x aufgerufen)
Michael
  Mit Zitat antworten Zitat
NicoDE
 
#10
  Alt 13. Mär 2006, 09:16
Edit: hat sich erledigt
Allerdings kann ich das Problem (hängender Prozess) immer noch nicht nachvollziehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr.
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