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
    Greg

    P.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" wirkt
    

    Hä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" wirkt
    

    Hä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-Ereignisobjekts
    

    Viel Erfolg
    Evi48



  • dann benutze WM_TIMER (wird intern auch von TTimer verwendet) und bau dir deinen eigenen Timer.


Anmelden zum Antworten