Thema: Delphi Alternative zu SLEEP

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#17

Re: Alternative zu SLEEP

  Alt 10. Apr 2006, 16:41
@Mabuse,

das ist ein zu einfacher Vergleich. Wichtig ist der Punkt in welchem Kontext meine Delay() Funktion aufgerufen wird.

Das ordinäre Sleep() lässt einen beliebigen Thread für Millisekunden schlafen. Es gibt aber nun Threads die einen Messagequeue installieren und solche die keinen haben. Der Mainthread eines Prozsses zb. hat eine Nachrichtenschleife ein davon abgespalteter Thread "meistens" nicht.

Eine ordinäre Schleife per GetTickCount() und Application.ProcessMessages würde sich demnach unterschiedlich verhalten jenachdem in welchem Thread sie aufgerufen würde. Defakto sollte man sogar so einen Schleife niemals aus einem abgespalteten Thread heraus aufrufen, da sie nämlich im grunde nicht Threadsafe ist.

Das Delay() verhält sich dazu im Gegensatz entsprechend den Gegebenheiten. In einem Thread ohne Messagequeue verhält es sich fast exakt wie Sleep(), es wartet, kann aber unterbrochen werden wenn der besagte Thread massiv von aussen terminiert wird !
In einem Mainthread zb. würde das Warten immer dann unterbrochen werden wenn zb. der Anwender Messages produziert indem er zb. die Maus über die Formulare bewegt, usw. Die Anwendung friert also nicht ein, noch verbraucht sie unnötig viel Rechnerzeit indem sie unnötig pollt.

Fazit: beide Methoden sind nicht miteinander vergleichbar, es ist sichtbar unterschiedlicher Source, weil sie logisch unterschiedliche Aufgaben erfüllen.

Gruß Hagen
  Mit Zitat antworten Zitat