AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ein Programm mit einem Thread beenden

Ein Thema von nalii · begonnen am 23. Jun 2007 · letzter Beitrag vom 24. Jun 2007
Antwort Antwort
nalii

Registriert seit: 2. Dez 2005
16 Beiträge
 
#1

Ein Programm mit einem Thread beenden

  Alt 23. Jun 2007, 12:47
Hallo (:

Es geht mir um Folgendes: Ich habe eine Applikation, die automatisch gestartet wird, z.B. beim Systemstart. Das Programm prüft gewisse Dinge ab und startet im betrachteten Fall eine Prozedur. Prozedur ist nicht ganz richtig, denn eigentlich ist es ein Thread.

Das Problem dabei ist nun, dass ich mein Programm auch gerne automatisch beenden wuerde, nachdem der Thread mit dem, was er machen soll, fertig ist. Allerdings kann ich am Ende des Threads nicht eine Art Application.Terminate einbauen, weil der Thread diese Funktion starten wuerde, die Applikation sich aber erst beenden wuerde, wenn der Thread fertig ist. Der ist es aber eben nicht, weil er das Programm nicht terminiert bekommt.

Ich denke momentan mit Sicherheit in die falsche Richtung ^_^ wie kann man das Beenden trotzdem loesen?

Vielen Dank im voraus.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Ein Programm mit einem Thread beenden

  Alt 23. Jun 2007, 12:56
Warte doch mit meinThread.waitfor auf das Zurückkehren des Threads, also:
Delphi-Quellcode:
meinthread:=TMeinThread.create(false);
meinThread.waitfor;
Application.terminate;
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
nalii

Registriert seit: 2. Dez 2005
16 Beiträge
 
#3

Re: Ein Programm mit einem Thread beenden

  Alt 23. Jun 2007, 15:30
Zitat von Apollonius:
Warte doch mit meinThread.waitfor auf das Zurückkehren des Threads, also:
Delphi-Quellcode:
meinthread:=TMeinThread.create(false);
meinThread.waitfor;
Application.terminate;
Juhuuuuuu

Vielen Dank, genau das brauchte ich. (:
  Mit Zitat antworten Zitat
nalii

Registriert seit: 2. Dez 2005
16 Beiträge
 
#4

Re: Ein Programm mit einem Thread beenden

  Alt 23. Jun 2007, 19:33
mh... ok, war ein bisschen zu frueh.

Wenn ich MyThread.Waitfor benutze, bekomme ich eine Exception.

"Das Handle ist ungültig (6)."

Ich habe ein bisschen gegoogelt und heraus gefunden, dass das wohl ein Fehler seitens Borland ist. Meinen Thread starte ich folgendermaßen:

Delphi-Quellcode:
     
      MyThread := MyThread .Create(TRUE);
      MyThread.FreeOnTerminate := TRUE;
      MyThread.Resume;
      MyThread.WaitFor;
Wird FreeOnTerminate auf FALSE gesetzt, bleibt das Handle erhalten. Aber FreeOnTerminate auf FALSE zu setzen, ist doch irgendwie suboptimal... Wie kann ich denn dann sichergehen, dass der Speicher trotzdem freigegeben wird? Mh... naja, wenn ich gleich nach dem Thread.Execute die Applikation schließe, wird dann der Speicher des Threads auch freigegeben?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Ein Programm mit einem Thread beenden

  Alt 23. Jun 2007, 21:53
Zwischen Waitfor und Application.terminate einfach noch MeinThread.free einbauen, dann wird der Speicher auch ohne freeonterminate ordnungsgemäß freigegeben.

Aber mal allgemein: Wenn du den Thread startest und dann auf sofort auf seine Rückkehr wartest - warum verwendest du dann einen Thread?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
nalii

Registriert seit: 2. Dez 2005
16 Beiträge
 
#6

Re: Ein Programm mit einem Thread beenden

  Alt 24. Jun 2007, 12:04
Zitat von Apollonius:
Zwischen Waitfor und Application.terminate einfach noch MeinThread.free einbauen, dann wird der Speicher auch ohne freeonterminate ordnungsgemäß freigegeben.
Jep, danke. Das man da in solchen Momenten nicht selber drauf kommt

Zitat von Apollonius:

Aber mal allgemein: Wenn du den Thread startest und dann auf sofort auf seine Rückkehr wartest - warum verwendest du dann einen Thread?
Mhja, weil der Thread in dem Programm zwei Anwendungsbereiche findet. Der zweite kam irgendwann spaeter hinzu (also der, dass alles automatisch starten und sich wieder beenden soll) und am einfachsten / schnellsten dies zu realisieren war, den Thread beizubehalten und bloß entsprechend anzupassen. Aber im Grunde hast du recht, eigentlich waere ein Thread in diesem Fall nicht notwendig.
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:37 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