定时刷新参数

来源:互联网 发布:php serialize json 编辑:程序博客网 时间:2024/05/29 13:26

最近做一个需求,需要程序不停止的情况下,定时刷新配置参数。


先做个timer类:

typedef boost::function0<bool> TaskFunc;class Timer{public:  Timer(boost::asio::io_service& ios);  virtual ~Timer();  void schedule(TaskFunc task, boost::posix_time::ptime trigger_time, boost::posix_time::time_duration duration =      boost::posix_time::seconds(0));  void cancel();private:  void handle_timeout(const boost::system::error_code& ec);  boost::asio::deadline_timer timer_;  boost::posix_time::ptime trigger_time_;  boost::posix_time::time_duration duration_;  TaskFunc task_;};typedef boost::shared_ptr<Timer> TimerPtr;
</pre><pre class="cpp" name="code" style="white-space: pre-wrap; word-wrap: break-word; width: 994.640625px; font-size: 14px; line-height: 23.3240013122559px;">
然后最外层,根据刷新时间,<span style="font-family: Arial, Helvetica, sans-serif;">调用dataMgr的readconfig来创建一个独立线程读取配置文件:</span>:
int refresh_minutes = config.get("refresh_minutes", (int) 60);Timer timer(io_service);boost::posix_time::ptime trigger_time(now.date(), boost::posix_time::time_duration(hh, mm, 0));if (trigger_time < now)<span style="white-space: pre;"></span>trigger_time += boost::posix_time::minutes(<span style="font-family: Arial, Helvetica, sans-serif;">refresh_minutes</span>);timer.schedule(boost::bind(&DataMgr::ReadIpConfig, &DataMgr::instance()), trigger_time, boost::posix_time::minutes(<span style="font-family: Arial, Helvetica, sans-serif;">refresh_minutes</span>));
bool DataMgr::ReadIpConfig()
{
try
{
boost::thread thr(boost::bind(&DataMgr::ReadIpConfigFromXML, this));
}
catch (const char* msg)
{
LOG4CPLUS_WARN(logger, msg);
return false;
}
return true;
}


bool DataMgr::ReadIpConfigFromXML()
{
boost::mutex::scoped_lock lock(loading_, boost::try_to_lock_t());
//read conf
return true;
}

0 0
原创粉丝点击