Schon wer mit Multimedia Timern gearbeitet?



  • Und nochmal ich... so, mein erster Problem ist weg, nun hab ich ein viel tolleres. Ich bekomme scheinbar kein Event von meinem Timer 🙂

    Den hier hab ich mir ausgesucht 🙂
    http://www.codeproject.com/miscctrl/multimediatimer.asp#xx744232xx

    Angeblich bekommt man ein Event vom Timer, wenn er einen Hit hat (Ausdruck vom Programmierer), was für mich bedeutet, wenn er incrementiert wird, also angesprochen wird, bekomme ich einmal dieses Event.

    Bei mir wird es wie folgt aufgerufen:

    CClock<CCommDlg> myClock;
    	myClock.SetCallBack(this);
    	myClock.SetDelay(500); // in ms for a one shot timer
    	myClock.start();	// start the clock
    

    Und das "Eventhandling" dann entsprechend:

    void CCommDlg::TimerHappened(int id)
    {
    	myClock.stop();	// stop the clock	
    	VARIANT var2;
    	CString str;
    	var2 = m_mscomm.GetInput();
    	m_getvalue = var2.bstrVal;
    	CDialog::OnOK();
    }
    

    Ergebnis des Ganzen... mein Dialog öffnet sich und bleibt offen. Eigentlich sollte er ja zugehen, sofern TimerHappened abgearbeitet wird.

    Wer ne Idee? Wiederum Thx im Voraus...



  • Wird das CClock-Objekt vielleicht zerstört weil es den Scope verlässt?



  • Das sind Fragen, von denen ich null Ahnung hab 🙂 Bin ned wirklich erfahren beim Programmieren weil ich kein Informatiker bin sondern nen Elektroniker und somit nen Schmalspurprogrammierer 😉

    Hab aber eben (vor 2 Minuten) eine funktionierende Lösung gefunden für mein Problem 🙂

    Man packe ein:

    #include "windows.h"
    

    Rufe auf 😉 Aber bitte ID_TIMER unter Resource Symbols hinzufügen 😉

    SetTimer(ID_TIMER, 50, NULL); //50ms
    

    Und behandle das Event (Über den Wizard WM_TIMER in dem Dialog einfügen, per Hand is es nen bissl mehr) 🙂

    void CCommDlg::OnTimer(UINT nIDEvent) 
    {
    	// TODO: Add your message handler code here and/or call default
    
    	CDialog::OnTimer(nIDEvent);
    	KillTimer(ID_TIMER);
    	VARIANT var2;
    	CString str;
    	var2 = m_mscomm.GetInput();
    	m_getvalue = var2.bstrVal;
    	CDialog::OnOK();
    }
    

    Und fertig ist ein funktionierender Timer! Hab ja nur 6 Stunden gegrübelt wies funktionieren soll 😉

    Einzige Sache ist... nun schliesst er das Fenster dadrunter nicht mehr automatisch, was vorher bei Nutzung von CTime funktionierte, nicht automatisch 😮 Aber 256 Register eines Bausteins auszulesen mit CTime bei minimal 1 Sekunde Abstand ist... öhm, naja... indiskutabel 😉

    Naja, das bekomm ich auch noch irgendwie hin! Denke ich... ok... vielleicht 😉


Anmelden zum Antworten