boost asio 定时器 deadline_timer cancel

deadline_timer  cancel 功能还是挺方便的,举个例子,我们可以将它应用在网络收包中,用来等待数据包是否超时,实现超时重传的功能;以前在使用winpcap做帧数据传输时,用到这样的场景,因为考虑网络丢包的情况,需要对帧进行重传,在千兆网的协议中,有开始包,中间数据包,和结束包;收到一帧的第一个包后,启动定时器,当我们丢了结束包时,因为我们用结束包做一帧的结束标记,这是只能等到定时器超时,然后在重传该帧;在定时器超时的函数中实现重传功能;但是一般情况下不丢包,这是收到结束包后,我们需要取消定时器;

#include 
#include 
#include 
#include 
using namespace boost::asio;
using namespace std;

// timer handler 例子     
void timer_handler(boost::asio::deadline_timer* timer , const boost::system::error_code& err)    
{    
	if (err)    
	{    
		std::cout << "Timer cancel" << std::endl;    
	}    
	
	cout<< "hello Timer"<expires_from_now(boost::posix_time::seconds(seconds_from_now));    
	timer->async_wait(boost::bind(timer_handler, timer, boost::asio::placeholders::error));    
}   


int _tmain(int argc, _TCHAR* argv[])
{
	io_service ios;
	deadline_timer t(ios);

	timer_enable(&t,5);
	boost::asio::deadline_timer timer2(ios, boost::posix_time::seconds(2));
	timer2.wait();
	
	t.cancel();
	ios.run();

	return 0;
}

 

如果需要实现MFC 的Ontimer功能的话,只要在timer_handler函数 定时器时间到时,在次启动定时器就ok了。

 

你可能感兴趣的:(Boost库学习)