做到現在,感覺poco的應用場景(見本博客的其它博文)還是很好的,在這些應用場景下,構架中的類直接封裝到位,方便應用開發。
面向對象的目的在於軟件代碼的重復利用,避免重復造輪子,提高開發效率。POCO很好的體現了這個原則,和Qt一樣完善,可以說已經面向組件的開發。
下面開始看看本章節的內容:
一 poco c++定時器本質分析
定時器作為線程的擴展,也是編程時經常會被用到的元素。
在程序設計上,定時器的作用是很簡單。預定某個定時器,即希望在未來的某個時刻,程序能夠得到時間到達的觸發信號。
本定時器的應用場景很明確了:在線程中定時執行任務,如定時發送請求報文,定時備份數據。
編程時,一般對定時器使用有下面一些關注點:
1. 定時器的精度。Poco中的定時器精度並不是很高,具體精度依賴於實現的平台(Windows or Linux)
2. 定時器是否可重復,即定時器是否可觸發多次。 Poco中的定時器精度支持多次觸發也支持一次觸發,由其構造函數Timer決定
3. 一個定時器是否可以設置多個時間。 Poco中定時器不支持設置多個時間,每個定時器對應一個時間。如果需要多個時間約定的話,使用者要構造多個定時器。
二 poco c++定時器的應用步驟
2.1定義定時器變量
class MovieMode
{
Poco::Timer m_timerRestartLive;
};
2.2聲明並實現回調函數
void OnTimerReStart(Poco::Timer& timer);
void MovieMode::OnTimerReStart(Poco::Timer& timer);
{
}
2.3設置時間間隔
m_timerRestartLive.setStartInterval(10000); //第一次,多長時間啟動
m_timerRestartLive.setPeriodicInterval(1000); //設置定時時間間隔
可以這樣寫的: Timer timer(2500, 500);
2.4注冊回調函數
Poco::TimerCallback<MovieMode> timerCallback(*this, &MovieMode::OnTimerReStart);
2.5開啟定時器
m_timerRestartLive.start(timerCallback, *BigThreadPool::GetInstance());
2.6退出定時器
m_timerRestartLive.stop();
三 程序例子
程序的涵義:程序啟動2.5秒後,開啟定時器,在余下的2.5秒內,每隔0.5秒,執行一次。
#include "Poco/Timer.h"
#include "Poco/Thread.h"
#include "Poco/Stopwatch.h"
#include <iostream>
using Poco::Timer;
using Poco::TimerCallback;
using Poco::Thread;
using Poco::Stopwatch;
class TimerExample
{
public:
TimerExample()
{
_sw.start();
}
void onTimer(Timer& timer)
{
std::cout << "Callback called after " << _sw.elapsed()/1000 << " milliseconds." << std::endl;
}
private:
Stopwatch _sw;
};
int main(int argc, char** argv)
{
TimerExample example;
Timer timer(2500, 500);
timer.start(TimerCallback<TimerExample>(example, &TimerExample::onTimer));
Thread::sleep(5000);
// timer.stop();
return 0;
}