Timer-Problem



  • Hallo,

    Auf dem Form liegt ein Button und ein Timer. Wenn man den Button anklickt, dann soll nach 5. Sekunden ein ShowMessage-Aufruf ("1. ShowMessage() - 1. Aktion") kommen. Nach weiteren 5 + 1 Sekunden ein ShowMessage-Aufruf ("2. ShowMessage() - 2. Aktion") und nach einer weiteren Sekunde der dritte Aufruf ("3. ShowMessage() - 3. Aktion").

    Allerdings kommt erst die 3. Message, dann nach ein paar Sekunden die 2. und die erste fällt komplett aus. Was ist falsch? 😞

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    unsigned int timerAction;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
            timer->Interval = 5000;
            timerAction = 0;
            timer->Enabled = true;
    
            timer->Interval = 5000;
            timerAction = 1;
            timer->Enabled = true;
    
            ShowMessage ( "3. ShowMessage() - 3. Aktion" );
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::timerTimer(TObject *Sender)
    {
            switch ( timerAction )
            {
                    case 0:
                            ShowMessage ( "1. ShowMessage() - 1. Aktion" );
                    case 1:
                            ShowMessage ( "2. ShowMessage() - 2. Aktion" );
            }
            timer->Enabled = false;
    }
    //---------------------------------------------------------------------------
    


  • Klassischer Fall für den Debugger 🙄

    Überleg doch mal, was Dein Programm macht:
    Bei Buttonclick wird das Intervall gesetzt, dann die Timervariable auf 0 gelegt und der Timer aktiviert. Das Prog läuft weiter, überschreibt die Timervariable auf den Wert von 1 und zeigt anschließend die dritte MessageBox. Dann vergehen fünf Sekunden und OnTimer wird aufgerufen - Anzeige der zweiten MessageBox.

    unterm Strich: Dein Ansatz ist falsch. Nimm z.B. drei verschiedene Timer, oder was noch besser wäre, pack diese ganze Routine in das OnTimer-Ereignis.


Anmelden zum Antworten