Timer



  • Gibt es einen Timer (kenne ich von Delphi), oder muss ich selbst einen Thread starten. Ich kenne noch die Funktionsweise in C(Multithreading), aber innerhalb von Methoden will das nicht funktionieren.

    Ich benötige entweder eine Möglichkeit einen 2. Thread laufen zu lassen, oder dass eine Methode regelmäßig aufgerufen wird.

    mfg (c)h



  • Du brauchst:
    SetTimer
    WM_TIMER
    KillTimer
    🙂



  • ich finde beim MFC leider keine bereits vorhandenen WM_**** 😞
    WinAPI hatte doch genug davon*g*

    hab in der MSDN nachgeschaut MSDN

    kennst du ein Beispiel dafür?
    ansonsten bitte noch ein wenig weiterhelfen 😃

    mfg (c)h



  • chille07 schrieb:

    ich finde beim MFC leider keine bereits vorhandenen WM_**** 😞

    Mach mal Rechtsklick auf ne Klasse und dann "Behandlungsroutine für Windows-Nachrichten hinzufügen" 😉

    Dann Doppelklick auf die entsprechende Nachricht und schon haste deine OnTimer-Funktion.

    Den Timer an sich startest du mit SetTimer und stoppst ihn per KillTimer, wie estartu schon geschrieben hat. Die Funktionen solltest du in der MSDN finden...

    Gruß
    Brainiac



  • danke 😃
    werds mal versuchen...

    mfg (c)h



  • ok... ein Beispiel hab ich auch gefunden: Beispiel

    darin ist von

    void CMainFrame::OnStartTimer(); // ???
    void CMainFrame::OnStopTimer(); // ???
    void CMainFrame::OnTimer(UINT nIDEvent);
    

    die Rede.

    Die beiden markierten ("OnStopTimer()" und "OnStartTimer()") finde ich wieder mal nicht 🙄
    ich dachte die wären vielleicht bei den "Virtuellen Funktionen" aber wie's ausschaut habe ich mich da geirrt... woher bekomme ich die?

    mfg (c)h



  • man KANN die Methoden selbst einfügen, nur werden Sie dann nicht aufgerufen...

    void CMainFrame::OnStartTimer() 
    {
       m_nTimer = SetTimer(1, 2000, 0);
    }
    
    void CMainFrame::OnStopTimer() 
    {
       KillTimer(m_nTimer);   
    }
    
    void CMainFrame::OnTimer(UINT nIDEvent) 
    {
       MessageBeep(0xFFFFFFFF);   // Beep
    
       // Call base class handler.
       CMDIFrameWnd::OnTimer(nIDEvent);
    }
    

    mfg (c)h



  • Na, dann ruf du sie doch auf. 🤡
    Bei einem Dialog bietet sich OnInitDialog für OnStartTimer an. 🙂



  • hmm... es funktioniert jetzt, aber ich habe genau das gemacht, was wir (laut unserem Programmierlehrer) nicht machen sollten, nämlich im "grauen Bereich" herumzumanipulieren.

    protected:
    	//{{AFX_MSG(CMainFrame)
    	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    	afx_msg void OnKeyDown();
    	afx_msg void OnKeyLeft();
    	afx_msg void OnKeyUp();
    	afx_msg void OnKeyRight();
    	afx_msg void OnKeySpace();
    	afx_msg void OnTurnLeft();
    	afx_msg void OnTurnRight();
    	afx_msg void OnTimer(UINT nIDEvent);
    	afx_msg void OnStartTimer();
    	afx_msg void OnStopTimer();
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    

    hab da einfach die OnStartTimer() und OnStopTimer eingefügt, und hoffe dass es dadurch in Zukunft keine Komplikationen geben wird 😃

    PS.: "OnInitDialog" gibts auch nicht 😃

    mfg (c)h



  • Wieso hast du die da hin gepackt?
    Das sollte auch gehen:

    protected:
        //{{AFX_MSG(CMainFrame)
        afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
        afx_msg void OnKeyDown();
        afx_msg void OnKeyLeft();
        afx_msg void OnKeyUp();
        afx_msg void OnKeyRight();
        afx_msg void OnKeySpace();
        afx_msg void OnTurnLeft();
        afx_msg void OnTurnRight();
        afx_msg void OnTimer(UINT nIDEvent);
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
        void OnStartTimer();
        void OnStopTimer();
    };
    

    🙂



  • ich fragte mich, ob "ER" dann weiß, dass das "DIE"(richtige) Funktion ist. 😃

    mfg (c)h



  • Jupp, der weiß das schon.

    Denn der Unterschied deines Programms zu dem Beispiel dürfte sein, dass die Funktionen in dem Beispiel Handlerfunktionen für Buttons sind.
    Darauf deutet das On... hin. 🙂

    Außerdem wird afx_msg durch "nichts" ersetzt. Ob das da steht oder nicht ist egal, das ist eher ein Hilfsmittel für dich, damit du weißt, dass das ein Message-Handler ist. 😃


Anmelden zum Antworten