Wenn Sie eine bestimmte Funktion aus einem bereits laufenden Programm heraus aufrufen möchten, verwenden Sie Boosts Datum Uhrzeit Bibliothek und Asio .
#include <boost/date_time/gregorian/gregorian_types.hpp>
#include <boost/date_time/posix_time/posix_time_types.hpp>
#include <boost/asio.hpp>
namespace gregorian = boost::gregorian;
namespace posix_time = boost::posix_time;
namespace asio = boost::asio;
asio::io_service io_service_;
asio::deadline_timer timer_ (io_service_);
Stellen Sie dann die Zeit ein. In diesem Beispiel wird eine Zeichenkette mit der gewünschten Uhrzeit verwendet, z. B. "18:00:00" (Beachten Sie, dass Boost für die Zeitstempel standardmäßig UTC verwendet!)
gregorian::date today = gregorian::day_clock::local_day();
posix_time::time_duration usertime = posix_time::duration_from_string(time)
posix_time::ptime expirationtime (today, usertime);
Stellen Sie nun den Timer so ein, dass er Folgendes aufruft foo()
:
timer_.expires_at (expirationtime);
timer_.async_wait (foo); // use Boost::bind() if you want a member function
Sie können so viele Timer hinzufügen, wie Sie möchten timer_
mit Hilfe der beiden obigen Codeschnipsel. Wenn alles fertig ist:
io_service_.run ();
Beachten Sie, dass dadurch der aktuelle Thread übernommen wird. Sie müssen also run()
von einem anderen Thread aus, wenn Sie wollen, dass der Rest Ihres Programms weiterläuft. (Verwenden Sie natürlich Boosts Thema Bibliothek dafür.)