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.