Endlosschleife durch Button unterbrechen..



  • also, ich möchte die daten so schnell wie möglich übermitteln..geht das, dass ich sozusagen alle 2ms meine daten bekomme??

    in meiner funktion OnBtnClk(), wo ich meine abfolge für die daten habe, erstelle ich nur den timer und dann springe ich in die funktion OnTimer(..) und packe dann dort meine funktion, die zum empfangen der daten zuständig ist.

    anschließend ist das so, wenn ich den anderen button OnBtnClkStop() drücke, wird mir der timer "gelöscht". stimmt das soweit??

    nur mein problem ist: wenn ich mir hier angucke. ich erstelle einen timer mit bestimmter zeit, die er mir abläuft. wenn der timer dann nach 1.mal beendet ist hört er mir doch auf, meine daten zu empfangen oder nicht??oder läuft er dann von vorne??

    ich möchte wie schon beschrieben: dauerempfang meiner daten und sozusagen zwischendurch eine überprüfung,ob der OnBtnClkStop() gedrückt wurde. falls ja, aufhören zu empfangen. ist mit den vorschlägen hier diese funktion realisierbar??



  • Der Timer läuft so lange, bis du ihn wieder killst - und startet dir alle n Millisekunden die OnTimer()-Methode.


  • Mod

    Aber nur, wenn auch eine Nachrichtenschleife läuft... 🙂



  • Martin Richter schrieb:

    Aber nur, wenn auch eine Nachrichtenschleife läuft... 🙂

    Stimmt. Aber solange du dich nicht stundenlang in einem Message-Handler festhängst, sollte das nicht das Problem darstellen. Ein Nachteil bei dem Timer-Ansatz dürfte sein, daß du auf einen vorgegebenen Rhythmus festgelegt bist.

    PS: Nur falls es dich interessiert, der Ansatz mit Threads:

    CEvent m_stop;//in der Dialog-Klassse
    
    void CMyDlg::OnButtonStart()
    {
      afxBeginThread(th_func,this);
    }
    
    UINT CMyDlg::th_func(LPVOID me)//static Methode
    {
      CMyDlg* pThis = (CMyDlg*)me;
      while(WaitForSingleObject(pThis->m_stop,0)==WAIT_TIMEOUT)
      {
        //empfange und verarbeite einen Datensatz
      }
      return 0;
    }
    
    void CMyDlg::OnButtonStop()
    {
      m_stop.SetEvent();
    }
    

    (hierbei mußt du allerdings bedenken, daß fremde Threads nicht auf die Ansicht zugreifen dürfen - sprich: die Thread-Funktion darf keine Control-Variablen des Dialogs anfassen und auch nicht UpdateData() und dergleichen aufrufen)



  • also, für mich denke ich würde sich die timer- methode dann empfehlen..einfach beim drücken des buttons laufen lassen und immer wieder wiederholen und dann beim drücken des anderen buttons, den timer killen..gibts eigentlich irgendwelche pdf´s oder so zum thema "timer"??



  • was ich noch fragen wollte: was gebe ich unter <TIMER_RESSOURCE> und <Zeit> ein bzw. wie??



  • schau mal in der MSDN nach, oder google nach "SetTimer()". Da sollte was zu finden sein.



  • TIMER_RESSOURCE - eine beliebige ID, die du später wiedererkennen mußt
    Zeit - die Laufzeit des Timers im Millisekunden



  • kann ich eigentlich in der Methode OnTimer eine Funktion aufrufen??oder muss ich den Code dort reinpacken..??


  • Mod

    Klar kannst Du! Warum solltest Du das nicht können? Was denkst Du denn was passiert wenn eine Funktion aufgerufen wird?


Anmelden zum Antworten