C++11 Thread
-
Angenommen ich möchte das ein Thread alle 60 Sekunden etwas prüft, parallel zum eigentlichen Programm Ablauf natürlich. Sollte ich den Thread besser einmal starten und innerhalb des Threads dann eine while Schleife mit einem Sleep(Windows!) laufen lassen oder gibt es irgend eine Möglichkeit einen Timer festzulegen, der den Thread immer wieder nach 30 Sekunden startet?
lg
Wolfgang
-
damit verschiebst du das problem nur. einmal aus dem thread und einmal in den thread.
ich würd den thread sich immer wieder schlafen legen, aber nicht 60 sekunden sondern eher so naja was zwischen 1 und 5 sekunden. so hast du wenigstens en bisschen kontrolle solange du die zeit mitrechnest
-
die c++ referenz deiner wahl ist dein freund
http://en.cppreference.com/w/cpp/thread/sleep_for
http://en.cppreference.com/w/cpp/threadund dann so wie es Skym0sh0 beschrieben hat
-
Es gibt Timer, ja. Verschiedenste sogar. Damit kann man gut arbeiten. Alle 30 Sekunden einen neuen Thread erzeugen ist auch kein Thema, verglichen mit dem 30 Sekunden Intervall ist der Overhead quasi verschwindend klein.
Sleep()ist aber auch nicht doof.
Bzw. oft bietet sichWaitForSingleObject(event, timeout)an. So kann man den Thread dann schnell beenden - ohne eben warten zu müssen bis das Timeout wieder mal abgelaufen ist.Was besser ist kommt auf den Rest des Programms drauf an.
ps: Wenn du Windows-spezifische Fragen stellst poste bitte ins WinAPI Forum.
-
Möglich wäre auch 59 Sekunden warten und dann konstant pollen, um meistens keine CPU zu verschwenden, aber am Ende doch Genauigkeit zu haben. Je nach Anforderung reicht ein Sleep aber auch.
<
>
-
Wie wärs mit nem boost.asio timer, der alle 60 sec den check anstößt? den ioservie lässte dann in dem separaten Thread laufern und gut ists
-
