Zeitlich definiertes Aussteigen aus einer while-Schleife



  • Von hier: http://www.adontec.com/ ?
    ^Kenn ich nicht, aber hier müsstest du wohl mit der ComGetSetEventProc irgendwie ne Funktion aufsetzen die mit Setevent einen Event feuert... hmmm Kenn leider die Library nicht aber ich nehme an die oben von mir genannte Funktion dient dazu eine Callback Funktion zu setzen welche bei (beliebigen) events aufgerufen wird?

    -junix



  • Hi,

    das mit ComGetSetEventProc versteh ich gar nicht. Wie genau funktioniert CreateEvent und wie schaffe ich es das iich im entscheidenden Moment informiert werde?
    Hat vielleicht jemand ein verständliches Beispiel mit kurzer Erklärung?

    Frage ich nämlich ständig den Port in einem Thread ab:

    do
      {
      if (ComGetEvent(COM_1) == evRXRDY)
              {
              Readchar();
              }
      if (Terminated)
         return;
      }
      while (true);
    

    dann stürzt der Rechner nach ein paar Minuten ab. Die Prozessorauslastung beträgt in der aktiven Zeit ständig 100%.

    Ich möchte aber unbedingt zu dem Zeitpunkt an dem das Zeichen am Com-Port ankommt darauf reagieren, da ich die Zeitinformation benötige.

    Vielleicht kann mir jemand helfen.

    Gruß WhileBrecher



  • Haste mir mal irgendwo die Doku zu der API der Library? Dann kann ich dir vielleicht mal helfen ... Speziell zur Doku zur ComGetSetEventProc....

    -junix



  • Also das mit dem Timer funktioniert natürlich nicht, da du dich doch die ganze Zeit mit der while-Schleife in der WindowProc deiner Form befindest. Ein Application->ProcessMessages() in der Schleife sollte das Problem beheben. Ansonsten geht das hier auch:

    DWORD ms = GetTickCount();
    while( GetTickCount() < ms + 1000 )
    {
       // Was immer du da auch machen willst
    }
    


  • falls zu erwarten ist, dass das proggi auf einem rechner läuft, der rund um die uhr an ist (z.B. ein Server) dann sollte man beachten, dass die Schleife von WebFrizi unter Umständen in eine Endlosschleife verfällt
    nach 49.7 Tagen schlägt GetTickCount auf 0 um.
    der fall tritt sicherlich sehr sehr selten ein, aber ihr kennt ja alle murphy. die fehler treten immer da auf, wo man es am wenigsten erwartet 😉

    Lösung:

    #include <math.h>
    .
    .
    .
    DWORD ms = GetTickCount();
    while( abs(GetTickCount() - ms) >= 1000 )
    {
       // Was immer du da auch machen willst
    }
    

Anmelden zum Antworten