Eine Frage zu Timern



  • Hi zusammen,

    ich hab ne Frage zu Timern... laufen diese in einem eigenen Thread oder wird die angegebene Funktion in dem aktuellen Thread bzw. in dem Thread ausgeführt in dem der Timer erzeugt wurde?

    Ich meine wenn der Thread mit einer Berechnung beschäftigt ist, die z.B. 30 Minuten dauert und ich möchte mit einem Timer die verstrichene Zeit anzeigen... Muss ich dann die Berechnung in einem extra Thread ausführen?

    Ist eher ne allgemeine Frage zu Timern... wie diese zu funktionieren...

    Vielen dank für jegliche Erklärungsversuche
    Jochen



  • Timer sind leider kein Threadersatz.
    Wenn deine Berechnung 30 Minuten dauert, dann steht dein Programm 30 Minuten - egal ob du Timer nutzt oder nur auf einen Knopfdruck reagiert hast.

    Zu Threads schau mal in die FAQ, da gibts auch Infos dazu. 🙂


  • Mod

    Timer werden nur verwendet, wenn die nachrichten Schleife ausgeführt wird. Also wenn GetMessage und PeekMessage aufgerufen werden. Dann werden die WM_TIMER Nachrichten in den Nachrichten Strom eingefügt.



  • Danke erstmal für die Antworten...

    Nun hab ich mich entschlossen einen Timer zu verwenden... ich würde jetzt gerne in meiner Klasse einen Timer starten und eine Methode dieser Klasse immer wieder aufrufen...

    Ich hab mir dazu die ::SetTimer() Methode angeschaut... aber die möchte nun eine TimerProc-Function haben. Wie mach ich das, dass ich dort nur eine Methode meiner Klasse übergeben kann? Oder gibt es andere Timer die besser für sowas sind, also eine Methode einer Klasse in regelmäßigen Abständen ausführen.



  • Dort kannst du nur eine globale Funktion oder eine statische Methode übergeben (die bekommt als ersten Parameter dein Fenster-Handle - mit CWnd::FromHandlePermanent() bekommst du das dazugehörige CWnd-Objekt) - oder du übergibst dort NULL, dann wandert die WM_TIMER Nachricht durch die normale Nachrichtenkette zu demjenigen, der die passende ON_TIMER()-Behandlung implementiert hat.


Anmelden zum Antworten