Timer-Problem...



  • Hi,
    ich habe, wie der Title schon sagt, ein Problem mit einem Timer. Also ich erstelle ihn vollgender Maßen:

    Variable

    UINT_PTR m_Timer;
    

    Das erstellen des Timers

    BOOL CTestAppView::PreCreateWindow(CREATESTRUCT& cs)
    {
    	m_Timer = SetTimer(1, 2000, NULL);
    
    	return CView::PreCreateWindow(cs);
    }
    

    Meine OnTimer-Funktion

    void CTestAppView::OnTimer(UINT nIDEvent)
    {
    
    	if(nIDEvent == m_Timer)
    	{
    		//DieFunktion();
    		MessageBox("Timer!");
    	}
    
    	CView::OnTimer(nIDEvent);
    }
    

    Der Timer soll alle 2 Sekunden auf gefrufen werden (2000 Milisek). Demnach sollte die Funktion OnTimer() auch alle 2 Sekunden aufgerufen werden, aber das wird sie nicht.
    BTW. OnTimer() soll nochmal eine andere Funktion aufrufen...

    Ich kann mir nicht erklähren warum das nicht funktioniert. Findet einer von euch den Fehler?



  • Wird die OnTimer Methode überhaupt mal aufgerufen?



  • m_Timer = SetTimer(1, 2000, NULL);

    Kann das falsch sein?? Versuch es mal so:

    SetTimer(m_Timer, 2000, NULL);

    Also ich kenne es nur so das ich ein Resourcen Symbol einbinde, diesen dann TIMER nenn und dann klappt das auch!



  • Also ich kenne das so:

    Um einen Timer zu starten, muss man zunächst, wie im vorherigen Beitrag beschrieben, eine Ressourcen hinzufügen (also 'ne ID für den Timer).

    Dann kann man den Timer so starten:

    SetTimer(ID_MY_TIMER, 2000, NULL);
    

    In der Methode OnTimer, wird die als Parameter übergebene EventID mit der ID des Timers verglichen:

    void meineView::OnTimer(UINT nIDEvent)
    {
        if(nIDEvent == ID_MY_TIMER)
            //weiterer Code
    }
    


  • DarkLord schrieb:

    Das erstellen des Timers

    BOOL CTestAppView::PreCreateWindow(CREATESTRUCT& cs)
    {
    	[b]m_Timer = SetTimer(1, 2000, NULL);
    [/b]
    	return CView::PreCreateWindow(cs);
    }
    

    Woher kommt die 1 in deinem Timeraufruf?
    Diese Zahl müsste dan vom Typ UINT_PTR sein. Der Rückgabewert der SetTimer Methode ist ein Integer...

    Versuchs mal so (Wie Union222):
    Anlegen einer Timerressource unter Ressourcen im Projektmanger, dann rechten Mausklick auf Ressourcenordner, dann Ressourcensymbole anwählen und mit Neu eine neue Ressource anlegen (ID_MyTimer; Wert = 100, oder so)...

    Dann:

    SetTimer(ID_MyTimer, 2000, NULL);
    

    Dann in der On_TIMER Methode:

    void CTestAppView::OnTimer(UINT nIDEvent)
    {
    switch (nIDEvent)
    	{
    	case ID_MyTimer:
    
    	break;
    	}
    
        CView::OnTimer(nIDEvent);
    }
    

    Ich habe Dir da noch n' Link:
    [url]
    http://www.codeproject.com/system/timers_intro.asp
    [/url]

    Da werden die einzelnen Timertypen genau beschrieben und es wird gezeigt, wie
    mans macht...

    Gruz

    Dan


Anmelden zum Antworten