boost asio(1) 封裝了定時器類

2021-06-21 21:04:47 字數 2051 閱讀 3762

用過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,也...