Timerersatz
-
Hi!
ich habe vor in mein Programm eine Verzögerung einzubauen, dass z.B. nach 5 sec. ein Befehl ausgeführt wird ohne einen Timer zu benutzen. Wie funktioniert das?MfG
GregP.S: bitte sagt mir nicht dass ich vorher suchen sollte, ich habe die suchfunktion benuzt und habe nichts gefunden.
-
::Sleep(x); //x = int, Verzögerung in Millisekunden Application->ProcessMessages(); //Damit das Programm nicht "abgestürzt" wirktHättest du aber eigentlich über die Suche finden müssen

-
Reyx schrieb:
::Sleep(x); //x = int, Verzögerung in Millisekunden Application->ProcessMessages(); //Damit das Programm nicht "abgestürzt" wirktHättest du aber eigentlich über die Suche finden müssen

Mit Sleep() halte ich das ganze Programm auf ;). Ich will dass das Programm jedoch weiterläuft und nur in bestimmten Abschnitten die Timerfunktion einsetzt.
-
Hallo
warum willst du denn keinen TTimer benutzten? Genau Dafür ist er doch da!
Ansonsten mußt du eben ein Thread erstellen, der Sleep(x) und dann deine Aktion ausführt.bis bald
akari
-
Ich meine, dass die Funktion nur das Form, in dem Sie aufgerufen wird, anhält. Du könntest also einfach die Funktion in ein Form schreiben und dieses dann unsichtbar in einem anderen Form anzeigen!
-
Hallo Greg12,
hier eine Execute - Funktion eines Thread der in Abhängigkeit einer Zeit durchlaufen wird.// In dem Thread wird der IO-Port gepollt. Das Thread kann mit dem // Ereignis End-Event beendet werden. void __fastcall TParallelIO::Execute() { char cMessage[255]; while (!Terminated) { // Endlos-Schleife des Thread // Warten auf das Ereignis. Nach Ablauf von zwei Sekunden wird der // Time-Out ausgelöst. if ((OnStatusExecute->WaitFor (TREADTIMEOUT)) != wrTimeout) { // Fehlermeldung ausgeben sprintf(cMessage, "[TParallelIO::Execute]" " Fehler im Thread Fehler-Nr.: %d", OnStatusExecute->LastError); IOPort->msgErrorExt( ICONTROL_PANEL, IFEHLER, "", cMessage); }else { Synchronize(EinlesenIOPort); // Ereignis bearbeiten } // Ende: if ((OnStatusExecute->WaitFor (TREADTIMEOUT))!= wrSignaled) } // Ende: while (!Terminated) // Der Thread wird nur beim beenden der Applikation beendet. Als // externes Zeichen werden die drei Kontrollleuchten eingeschaltet. KontrollLampenEin(); } // Der Thread ist aufgebaut als eine Endlosschleife, die durch den // Funktionsaufruf "WaitFor" der Klasse TEvent unterbrochen wird. // Die Schleife wird wieder fortgesetzt, wenn ein Ereignis fuer // "OnStatusExecute" gesetzt wird oder der Timeout abgelaufen ist. OnStatusExecute = new TEvent( NULL, // Zugriffsrechte und Vererbungsmoeglichkeiten false, // automatisch zurueckgesetzen false, // TEvent-Objekt mit rueckgesetztem Signal erzeugen ""); // Name eines Windows-EreignisobjektsViel Erfolg
Evi48
-
dann benutze WM_TIMER (wird intern auch von TTimer verwendet) und bau dir deinen eigenen Timer.