Kleiner Timer



  • Hi,
    ich habe noch keine Erfahrungen damit, wie man in VC++ (2005) mit Zeiten umgeht. Eigentlich habe ich nur ein ganz simples anliegen. Ich brauche eine Routine, die, wenn sie aufgerufen wird, einfach 3 Sekunden wartet, also quasi das Programm für drei sekunden unterbricht. Welche Header-Datei muss ich einbinden und welche Funktion(en) kann/sollte ich für diesen recht simplen Timer verwenden?

    Vielen Dank 🙂



  • vielleicht hilft Dir das hier:
    http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/inhalt.htm
    (siehe Abschnitt mit Timern)

    mfg



  • sevobal schrieb:

    Ich brauche eine Routine, die, wenn sie aufgerufen wird, einfach 3 Sekunden wartet, also quasi das Programm für drei sekunden unterbricht.

    einfach <windows.h> #includieren (wenn nicht schon getan) und 'Sleep(3000)' aufrufen um ~3 sekunden zu warten...



  • Sleep hält aber das ganze Programm an. Alles. Auch die Fähigkeit, das Dialogfeld zu verschieben oder zu schließen.



  • NES-Spieler schrieb:

    Sleep hält aber das ganze Programm an. Alles. Auch die Fähigkeit, das Dialogfeld zu verschieben oder zu schließen.

    sevobal schrieb:

    ...also quasi das Programm für drei sekunden unterbricht...

    will er das nicht?

    btw: 'das ganze programm' ist nicht ganz zutreffend. 'Sleep' lässt nur den thread pausieren, der es aufgerufen hat.



  • will er das nicht?

    Ich weiß es nicht genau, aber im Standardfall gehe ich davon aus, daß das Programm nur für drei Sekunden mit dem warten soll, was es sonst so ausführt. Ich kann mir nicht vorstellen, daß das gesamte Ding eingefroren werden soll, inklusive der Fähigkeit zur Bewegung oder zum Schließen des Fensters.

    btw: 'das ganze programm' ist nicht ganz zutreffend. 'Sleep' lässt nur den thread pausieren, der es aufgerufen hat.

    Ja, ja, wenn man es ganz genau haben will, dann ist das so wohl richtig. Aber bei einer einfachen Anwendung, bei der nicht gerade irgendwelche Threads laufen, stoppt der Aufruf von Sleep nunmal praktisch gesehen das ganze Programm.



  • btw: 'das ganze programm' ist nicht ganz zutreffend. 'Sleep' lässt nur den thread pausieren, der es aufgerufen hat

    da ja Sleep im Programm angesprochen wird setzt Sleep ja den thread auser kraft der das prog an sich um laufen hält.

    wenn du Sleep in einem programm verwenden willst must du die funktionen die du schlafen schicken willst in einem extra thread starten. dies gilt für die Funktion die in dem Thread gestartet wird und auf alle in dieser Funktion verwiesenen Unterfunktionen.

    Somit bleiben alle anderen Funktionen (Dialogfeld verschieben, schließen usw..) die nicht mit dem thread zusammenhängen in kraft.

    mfg
    LowFly



  • LowFly schrieb:

    wenn du Sleep in einem programm verwenden willst must du die funktionen die du schlafen schicken willst in einem extra thread starten.

    aber warum sollte man funktionen schlafen schicken? man kann vielleicht verhindern, dass sie zu oft aufgerufen werden. so etwa:

    void func (void)
    {
       static DWORD time = 0;
    
       // zu früh aufgerufen?
       if (time >= GetTickCount())
          return;
    
       //
       // mach was sinnvolles
       //
    
       // nächter aufruf nicht vor 3 sekunen
       time = GetTickCount() + 3000;
    }
    


  • Wie ihr richtig erkannt habt wollte ich nicht das ganze Programm einfrieren. Vielen Dank euch allen für eure zahlriechen Hinweise und Tipps 🙂 Denke ich werde eine Lösung ähnlich der von "net" anstreben. Da, wie ihr bereits sagt, Sleep das ganze Programm einfriert, und das war nicht ganz meine Absicht 😉



  • @ net du nennst es aussetzen lassen ich schlafen schicken in jedem fall bewirkt es das gleiche nämlich das die funktion nicht ausgeführt wird denke du hast mich nur falsch verstanden;)


Log in to reply