我能夠通過聲明它爲靜態來創建處理程序以用於boost deadline_time(它是成員) 。不幸的是,這會阻止訪問非靜態成員數據。從處理程序獲取類數據以進行boost deadline_timer
我有一系列的超時。所以我的想法是有一個deadline_timer ,同時保持超時事件的有序列表。 每次發生下一個超時事件時, 該類將重新觸發該計時器,並使用類 中的下一個超時事件計算此超時事件的剩餘時間。
對於這個概念的工作處理程序將需要操縱 非靜態數據。但是這是不可能的boost :: asio需要一個靜態處理程序。
有人知道如何處理這個問題嗎?
class TimerController {
public:
void setTimer(const eibaddr_t gad, const timesecs_t timedelay);
void cancelTimer(const eibaddr_t gad);
bool isRunning(const eibaddr_t gad);
void setGad(const eibaddr_t gad);
static void timerHandler(const boost::system::error_code &ec);
private:
boost::asio::deadline_timer* m_pTimer;
struct timerList_s
{
eibaddr_t gad;
boost::posix_time::ptime absTimeOut;
timerList_s(const timerList_s& elem) : gad(elem.gad),
absTimeOut(elem.absTimeOut)
{
};
timerList_s(const eibaddr_t& pgad, const boost::posix_time::ptime pato)
: gad(pgad),
absTimeOut(pato)
{
};
timerList_s& operator= (const timerList_s& elem)
{
gad = elem.gad;
absTimeOut = elem.absTimeOut;
return *this;
};
bool operator< (const timerList_s& elem) const
{
return (absTimeOut < elem.absTimeOut);
};
bool operator== (const timerList_s& elem) const
{
return (gad == elem.gad);
};
};
std::list<timerList_s> m_timers;
非常感謝。這向我展示瞭如何解決這個問題。因爲我想區分取消和過期的定時器,我需要傳遞錯誤代碼(請參閱上面的處理程序的參數)。有關此主題的討論,請參閱http://stackoverflow.com/questions/1918911/better-boost-asio-deadline-timer-example。所以我需要使用m_pTimer-> async_wait(boost :: bind(&TimerController :: timerHandler,this,_1))傳遞參數。請參閱http://stackoverflow.com/questions/4426802/boost-asio-async-wait-handler – 2012-03-19 21:31:51