用過mfc的童鞋都知道,settimer, killtimer, ontimer很好用。
但是boost::asio裡面也有乙個定時器類(boost::asio::deadline_timer)。
但是和mfc的定時器類有區別,mfc裡面當你killtimer後,ontimer不被呼叫。但是boost::asio裡面的超時處理函式會被立即呼叫。
因此我自己寫乙個乙個類,具有settimer, killtimer, ontimer,並且killtimer後,ontimer不被呼叫。
請看:
#include #include #include #include #include #include class casynctimer
ptimer_info pinfo = new timer_info;
pinfo->itimerid = itimerid;
pinfo->ielapse = ielapse;
pinfo->pchild = pchild;
pinfo->timer = boost::shared_ptr< boost::asio::deadline_timer >(new boost::asio::deadline_timer(*m_sp_ios));
pinfo->timer->expires_from_now(boost::posix_time::millisec(ielapse));
pinfo->timer->async_wait(boost::bind(&casynctimer::ontimerinternal, this, itimerid, boost::asio::placeholders::error));
m_maptimer.insert(std::pair(itimerid, pinfo));
return true;
}bool killtimer(int itimerid)
ptimer_info pinfo = (ptimer_info)(it->second);
pinfo->timer->cancel();
m_maptimer.erase(it);
return true;
}virtual void ontimer(int itimerid, const boost::system::error_code& error)
ptimer_info pinfo = (ptimer_info)(it->second);
pinfo->timer->expires_from_now(boost::posix_time::millisec(pinfo->ielapse));
pinfo->timer->async_wait(boost::bind(&casynctimer::ontimerinternal, this, itimerid, boost::asio::placeholders::error));
}private:
void ontimerinternal(int itimerid, const boost::system::error_code& error)
ptimer_info pinfo = (ptimer_info)(it->second);
((casynctimer*)(pinfo->pchild))->ontimer(itimerid, error);
casynctimer::ontimer(itimerid, error);
}protected:
typedef struct tagtimer_info timer_info, *ptimer_info;
typedef std::mapmaptimer;
casynctimer(boost::asio::io_service& ios)
: m_sp_ios(&ios)
~casynctimer()
m_maptimer.clear();
}maptimer m_maptimer;
boost::shared_ptr< boost::asio::io_service > m_sp_ios;
};
定時器的封裝
定時器的封裝可以通知窗體,可以不通知窗體。1 定義 typedef void callback timerproc hwnd hwnd,uint umsg,uint ptr idevent,dword dwtime class cmytimer 2 實現 cmytimer cmytimer bool...
定時器 函式封裝
一 return返回值 1 函式 括號 2 所有函式預設返回值 未定義 3 return後任何 都不執行 二 定時器 1.setinterval 1 是乙個實現定時呼叫的函式 2 setinterval 函式,毫秒 重複執行 3 clearinerval 清除 2.settimeout 1 只執行一...
定時器 STM32定時器 基本定時器1
我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...