定时函数调用

我在C ++,Linux环境下编程。 我怎样才能以一定的时间间隔以asynchronous的方式,并定期调用一个函数? 我在http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/tutorial/tuttimer2.htmlfind了Boost计时器。 但是,它需要调用io.run()来调用callback函数,这又将我带回到需要我照顾经过的时间来调用函数的原始问题。 我需要的东西就像C#System.Threading.Timer,它会callback我指定的时间段之后传递的函数。

我正在考虑为每个函数调用创build一个线程。 不过,我有相当多的这样的定时器callback。 因此,恐怕创build这样的线程会花费很多,还是有其他的select呢?

谢谢。

asio io_service运行在自己的线程中,一旦你安排了一个计时器事件,它会在适当的时候回拨你。

这是一个完整的例子:

 #include <iostream> #include <boost/asio.hpp> #include <boost/bind.hpp> using namespace std; class timed_class { public: timed_class(boost::asio::io_service& io_service) : _timer(io_service) { // now schedule the first timer. _timer.expires_from_now(boost::posix_time::milliseconds(100)); // runs every 100 ms _timer.async_wait(boost::bind(&timed_class::handle_timeout, this, boost::asio::placeholders::error)); } void handle_timeout(boost::system::error_code const& cError) { if (cError.value() == boost::asio::error::operation_aborted) return; if (cError && cError.value() != boost::asio::error::operation_aborted) return; // throw an exception? cout << "timer expired" << endl; // Schedule the timer again... _timer.expires_from_now(boost::posix_time::milliseconds(100)); // runs every 100 ms _timer.async_wait(boost::bind(&timed_class::handle_timeout, this, boost::asio::placeholders::error)); } private: boost::asio::deadline_timer _timer; }; int main(void) { boost::asio::io_service io_service; timed_class t(io_service); io_service.run(); return 0; } 

编辑:调度在一个单独的线程,

 boost::thread t(boost::bind(&boost::asio::io_service::run, &io_service)); 

而不是io_service.run(); ,现在主线程会继续,一旦超时, io_service将调用handle_timeout

最简单的解决方案的伪代码:

 function doThis() { // your code here } function threadHandler() { sleep(SecondsUntilTime); doThis(); } function main () { anotherthread = thread_create(threadHandler); // more code here join(anotherthread); exit(); } 

一种选择是切换到glib或Qt作为其事件循环,然后使用它编写代码。