Timer mehrfach ausführen



  • Hallo,

    ich möchte gerne ein Programm mit Hilfe eines Timers mehrfach hinter einander ausführen, allerdings klappt das nicht so wie ich gerne möchte und es wird bei mir immer die letzte Funktion ausgeführt.

    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < 5; j++){
        Funktion(i,j);
      }
    }
    

    Ich möchte das Programm mit unterschiedlichen Parameter (i und j) hintereinander aufrufen.
    In der Funktion lösche ich den ev. vorhandenen Timer zuerst und setze ihn dann neu:

    void Funktion(int i, int j) {
      KillTimer(ID);
      // mache irgendwas mit i und j
      SetTimer(ID, MS, NULL);
    }
    
    void OnTimer(UINT nIDPackage) {
      // Programm ausführen
      // Dauer bekannt
    }
    

    Das Problem: 😡
    Die beiden for-Schleifen werden abgearbeitet, der Timer i*j oft gesetzt und für i = 9 und j = 4 wird dann OnTimer aufgerufen.
    Für die letzte Iteration stimmt der Ablauf, allerdings soll OnTimer für jede Iteration für eine bestimmte Dauer aufgerufen werden, wie kann man das machen? 😕

    Vielen Dank



  • Die for()-Schleife wird viel zu schnell für deine Zwecke durchlaufen, dadurch killst du alle vorigen Timer wieder, bevor sie aktiviert werden. Wenn du in jedem Durchlauf einen Timer starten willst (Randfrage: Wozu soll das gut sein?), benötigst du auch i*j Timer, die du später auch wieder auseinanderhalten kannst.



  • es ist so: ich habe ein Programm, dass alle X MS etwas ausführt. Ich möchte nun das Programm automatisieren und das Programm x-mal hintereinander ausführt. Dazu hätte ich die beiden for Schleifen gemacht.

    Du hast geschrieben dass ich dann i*j Timer benötige. Ich möchte aber alle Timer hintereinander ausführen. wenn der erste beendet ist, dann startet der Zweite, wenn fertig, dann der dritte und so....

    Hast du eine Idee wie das funktioniert?



  • In dem Fall ist vielleicht der Timer der falsche Ansatz - du benötigst eher Sleep(), um zwischen den einzelnen Aufrufen etwas warten zu können.

    oder du verwendest nur einen Timer, der einmal gestartet wird in der OnTimer()-Funktion i und j weiterzählt:

    void OnTimer(UINT nID)
    {
      ++i;
      if(i==i_max){i=0;++j;}
      if(j==j_max){KillTimer(nID);return;}
    
      // mach was mit i und j
    }
    

Anmelden zum Antworten