Timer-Problem



  • Hi,

    also ich hätte gerne einen Timer der soundso lange wartet bis eine bestimmte Taste zb gedrückt wird. Aber warum zum Teufel funtzt das nicht ?

    if(ID_COUNT_TIMER == 500)
    		{
    			m_Start.EnableWindow(TRUE);
    			CTimerDlg::OnBnClickedButton1();
    		}
    

    Also eigentlich rechne ich bei der Anweisung das der Timer bei 500 in die Schleife geht, aber nee er läuft einfach weiter und es passiert nix...need help pls



  • Erstens: Wo genau hast du diesen Ausschnitt reingepackt?

    Zweitens: Die Timer-Auswertung ist ein kleines bisschen komplizierter als "nur" irgendwo eine if-Bedingung einzufügen. Du mußt als erstes den Timer anlegen (per SetTimer() - dabei übergibst du eine ID und eine Laufzeit). Danach definierst du die OnTimer()-Methode und kontrollierst dort, welche Timer-ID dur übergeben bekommen hast.

    //z.B. in der InitInstance() oder OnInitalUpdate()
    SetTimer(ID_COUNT_TIMER,500/*ms*/,NULL)
    
    //Timer-Funktion
    void CMyWnd::OnTimer(int nIDEvent)
    {
      if(nIDEvent==ID_COUNT_TIMER)
      {
         mach was
      }
    }
    


  • Also ich hab die Anweisung in der OnInitDialog().

    Da hab ich ausserdem folgendes stehen :

    SetTimer(ID_COUNT_TIMER, 100,NULL);
    

    Dann hab ich ein Funktion Ontimer() , da steht :

    m_iCount++;
    m_sCount.Format("%d",m_iCount);
    

    außerdem hab ich eine Variable :

    m_iCount deklariert für das Feld wo der Timer hochzählt...

    Also wenn ich das Prog. starte dann zählt er mir wunderbar hoch, und eigentlich hab ich halt mit einer Reaktion gerechnet wenn ich : if(ID_COUNT_TIMER == 500)
    schreib...



  • Mit was für einer Reaktion hast du denn gerechnet? "ID_COUNT_TIMER" ist die Ressourcen-ID des Timers - und die ist konstant (welchen Wert die hat, kannst du dir gerne ansehen, indem du rechts draufklickst und "Go To Definition" auswählst) - d.h. deine Bedingung ist entweder immer erfüllt oder nie.



  • jo also mit

    if(nIDEvent==ID_COUNT_TIMER)
    {
    mach was
    }

    gehts ( wunder was ^^ ), muchas gracias

    Ja kein Plan hab halt nicht genau gecheckt wie ich den Timer richtig stelle. Warum müssen die auch alles so kompliziert machen 😞



  • Hier ein bespiel:

    SetTimer(1, 500,NULL);
    

    famit deklarierst du den Timer, seine ID ist in diesem Fall 1, und er zählt bis 500ms

    wenn dieses geschehen ist(also bei 500ms angekommen), wird OnTimer ausgelöst...
    "nIDEvent" wäre in diesem Fall dann "1"... da Timer 1 bei 500 angekommen ist

    void CMyWnd::OnTimer(int nIDEvent)
    {
         if(nIDEvent==1){
              //packe hier deinen Code rein
         }
    }
    

    verstanden?



  • jojo mittlerweile habs ich schon gecheckt , trotzdem thx 😋


Anmelden zum Antworten