sleep() funktioniert nicht!



  • Hehe^^ Klingt einleuchtend 😉



  • Siehe auch die FAQ unter "delay/verzögerung".

    Insgesamt sinnvoller wäre es aber wohl, die Mouse-Position per Hook zu prüfen (siehe FAQ) und die Pseudo-Animation des Fensters über einen Timer zu steuern.



  • Erstmal wissen was ein Hook ist und wie man sie benutzt 😉
    Und auf einfach abschreiben vom FAQ hab ich keinen Bock, will das auch verstehen^^

    Edit: Was erzähl ich hier, ist ja gar nicht mein Thread 😃



  • Danke für den Hinweis mit dem delay, da ich aber neu in C++ bin versteh ich nicht wie dies funktioniert. Ich habe mein Programm jetzt so abgeändert das die verzögerung einigermaßen passt. Aber das Programm verändert die grösse der Form1
    wenn ich einmal bei x=0 war und danach x>0 ist, dann hängt er in einer Endlosschleife. Dabei sollte er es doch nur machen wenn x=0 ist. Wo liegt verdammt nochmal mein Fehler.

    //---------------------------------------------------------------------------
    void delay(int D) // Dauer in Millisekunden
    {
      for (int i = 0; i < D; i += 5)
      {
        Sleep(10);
        Application->ProcessMessages();
      }
    }//---------------------------------------------------------------------------
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    
     TPoint pt;
    GetCursorPos(&pt);
    if (pt.x==0)
    {
    
            for (int zx=0;zx<80;zx++)
            {
            Form1->Height=zx;
            delay(5);
    
            }
    }
    
    }
    //---------------------------------------------------------------------------
    


  • Ich glaube ich habe das problem gefunden. Der delay springt aus de schleife zum void delay, aber danach springt void delay zum

    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    

    obwohl er wieder in díe schleife springen sollte.
    Hat jemand eine lösung parat?



  • wenn das interval deines timers abgelaufen ist, dann wird natürlich die event-funktion (ontimer) aufgerufen. wenn also dein ontimer schneller eintritt als das vorherige ereignis abgearbeitet wurde, dann kommt es zu überlagerungen der funktionsaufrufe...

    was willst du denn eigentlich erreichen?
    wozu der ttimer?
    wann wird der gestartet?



  • Killing me softly schrieb:

    sleep() hält die Ausführung deines Programmes für einen bestimmten Zeitraum an. Der übergebene Wert (in diesem Falle 30) gibt den Zeitraum in Sekunden an.

    in der BCB Hilfe, steht aber etwas anders

    Borland C++Builder-Hilfe schrieb:

    procedure Sleep(ATime: cardinal);

    Parameters

    ATime: cardinal
    The number of milliseconds to sleep.



  • s != S



  • sleep ist obsolete! und ruft intern Sleep auf!

    /*---------------------------------------------------------------------*
    Name            _sleep - suspends execution for interval
    
    Usage           unsigned _sleep(unsigned seconds);
    
    Prototype in    dos.h
    
    Description     With a call to _sleep, the current thread is
                    suspended from execution for the number of seconds specified
                    by the argument seconds. The interval is only accurate to
                    the nearest NT clock tick.
    
    Return value    None
    *---------------------------------------------------------------------*/
    void _RTLENTRY _EXPFUNC _sleep(unsigned seconds)
    {
        Sleep((DWORD)seconds * 1000L);
    }
    
    /* This version is obsolete and shouldn't be used anymore */
    void _RTLENTRY _EXPFUNC sleep(unsigned seconds)
    {
        _sleep (seconds);
    }
    


  • Ich wollte mir eine Menüleiste erstellen die so funtioniert wie die Taskbar von Windows wenn diese automatisch ein- & ausgeblendet wird.
    Das mit der sleep() funktion habe ich auch so gelesen doch komischer weise sind das bei mir keine millisekunden.



  • Ich zitiere an solchen Stellen jeweils gerne nochmals meinen mitmoderator:

    Jansen schrieb:

    s != S

    Du könntest während der Animation ja den Timer deaktivieren? damit verhinderst du überlagernde Aufrufe...



  • Danke für eure hilfe das mit dem s!=S hat funktioniert. Sleep(2) ist dann genau die zeitspanne die ich brauche.
    Macht weiter so.



  • Dann hatte mein Post ja doch noch was nützliches 😉



  • naja nur, dass du den falschen hilfe-beitrag zur falschen funktion rausgeschrieben hast! 😉



  • Genau deswegen mein ich ja 😉


Anmelden zum Antworten