Polling Methode



  • Hi,

    also ich brauche eine Möglichkeit einen Prozess zu realisieren, der prüfen soll, ob ein definierter Zeitpunkt erreicht/abgelaufen ist. Also ein Prozess der die Uhrzeit überwacht.

    Ich habe eine Ende Zeit und ein Time Prozess soll genau zu diesem Zeitpunkt ein Signal absenden.

    Bisher hab ich das so:

    while((tmp = time(NULL)) < end_time)
    {
    sleep(1);
    }

    Ist das ok oder wie kann man es besser machen?



  • sleep(end_time - time(NULL));
    


  • hey das hab ich noch nicht gesehen. tolle idee, danke.

    Aber was ich eigentlich meinte war, ob es elegantere polling methoden gibt, statt den Prozess mit sleep() ruhen zu lassen, um die CPU zu schonen?

    Evtl. mit Signalen? aber irgendwie muss ja doch ständig die Zeit abgefragt werden. Hm...



  • polling macht man mit diskreten ereignissen: das signal wird von einer bereits laufenden ereigniskette angestossen.

    zeit ist keine ereigniskette. du kannst zeitpunkte schon von der idee her nicht pollen.

    du kannst allerdings einen loop machen, der die aktuelle zeit mit <1s genauigkeit liest, der bis zur naechsten vollen sekunde schlaeft, die aktuelle zeit rausfindet (man weiss ja nie), dann eine liste nach terminen absucht und fuer passende "termine" ein signal abgibt oder ne funktion aufruft.

    wenn du nur auf einen zeitpunkt wartest, nimm das sleep deines betriebssystems:
    Sleep(millisec) fuer windows
    sleep(sec) und usleep(microsec) fuer unix



  • wenn du nur auf einen zeitpunkt wartest, nimm das sleep deines betriebssystems:

    ja aber das mach ich doch bereits.



  • warum fragst du dann noch?

    Aber was ich eigentlich meinte war, ob es elegantere polling methoden gibt, statt den Prozess mit sleep() ruhen zu lassen, um die CPU zu schonen?

    nein gibts nicht.



  • genau deswegen frag ich



  • Bei Sleep() schläft er eben - wieso sollte dein Programm da noch die CPU belasten?



  • Doch gibt es - natürlich.

    Unter Linux z.B. per alarm, das nach einer definierten Zeit ein Signal auslöst, dass man dann behandeln kann. Wartende Systemaufrufe werden abgebrochen, so dass man sogar ausserhalb des Signalhandlers reagieren kann.


Anmelden zum Antworten