建立乙個自定義定時器,其重點在於如何定時。
我的解決方案是適合採用觀察者模式,分為主題類cpdstimersub和觀察者類cpdstimerobj ,這個兩個類分別繼承ipdstimersub和ipdstimerobj介面 .
#pragma once
#include "stdafx.h"
#include
class ipdstimer
;virtual ~ipdstimer(){};
public:
/// @brief響應函式
virtual void ontimer() = 0;
};class ipdstimerobj : public ipdstimer
;virtual ~ipdstimerobj(){};
public:
/// @brief設定定時器,nid定時器id,ntimersplit間隔時間
virtual void settimer(unsigned int nid, unsigned int ntimersplit) = 0;
/// @brief設定新的定時器,並返回新的定時器id
virtual unsigned int setnewtimer(unsigned int ntimersplit) = 0;
/// @brief銷毀定時器
virtual void killtimer(unsigned int nid) = 0;
public:
/// @brief計時
virtual void counttime() = 0;
};class ipdstimersub
;virtual ~ipdstimersub()
;public:
/// @brief註冊定時器
virtual bool registertimer(unsigned int nid, ipdstimerobj* timerobj) = 0;
/// @brief反註冊定時器
virtual bool unregistertimer(unsigned int nid) = 0;
/// @brief通知所有定時器
virtual void notifyalltimer() = 0;
public:
std::mapm_mapidtimers;
};在主題類中建立乙個執行緒,執行緒每隔一秒,去通知所有觀察者類過了一秒了。
#pragma once
#include "ipdstimer.h"
#include
#include
class cpdstimersub : public ipdstimersub
;#include "stdafx.h"
#include "pdstimersub.h"
ipdstimersub* cpdstimersub::m_instance = nullptr;
static unsigned int g_nthreadid = 10086;
dword winapi threadfun(lpvoid pm)
;long lstarttime = gettickcount();
while(1) }
return 0;
} cpdstimersub::cpdstimersub()
cpdstimersub::~cpdstimersub()
bool cpdstimersub::registertimer(unsigned int nid, ipdstimerobj* timerobj)
bool cpdstimersub::unregistertimer(unsigned int nid)
}return false;
}void cpdstimersub::notifyalltimer()
}ipdstimersub* cpdstimersub::getinstance()
return m_instance;
}這樣的話,每個觀察者類就可以自己去計時,時間到了,就去執行響應函式
#pragma once
#include "ipdstimer.h"
class cpdstimerobj : public ipdstimerobj
;#include "stdafx.h"
#include "pdstimerobj.h"
#include "pdstimersub.h"
cpdstimerobj::cpdstimerobj(void)
: m_ntimesplit(1000)
, m_nrealtime(0)
, m_ntimerid(0)
, m_ppdstimersub(nullptr)
cpdstimerobj::~cpdstimerobj(void)
void cpdstimerobj::settimer(unsigned int nid, unsigned int ntimersplit)
void cpdstimerobj::killtimer(unsigned int nid)
void cpdstimerobj::counttime()
}void cpdstimerobj::ontimer()
unsigned int cpdstimerobj::setnewtimer(unsigned int ntimersplit)
}nnewid++;}}
return 0;
}測試如下:
#include "stdafx.h"
#include "pdstimerobj.h"
#include "pdstimersub.h"
int _tmain(int argc, _tchar* argv)
Win32 自定義本地資源dll
這裡是記錄我的經驗,沒啥技術含量的,小白這廂有禮了 最近在寫乙個服務框架,這個服務框架是給別人用於開發服務用的.開發人員使用服務的時候,需要使用一些認證用的授權檔案,每個服務都需要有個授權檔案.此時,不幸的是,我的框架裡面也用到了一些授權檔案,用來嵌入部分具體的系統服務.那麼問題來了,如果韓梅梅使用...
WIN32傳送自定義訊息
在win32訊息機制中,系統會傳送各種訊息到訊息佇列,開發可以呼叫getmessage得到相關訊息。win32的api也提供了對應開發自行的傳送訊息到訊息佇列的功能.sendmessagea直接傳送訊息到對應的視窗處理函式中,直到處理後函式才返回。postmessagea將資訊放入訊息佇列中,立即返...
win32 寫乙個檔案 (同步阻塞寫的方式)
com en us library windows desktop bb540534 v vs.85 aspx建立乙個新檔案,並且同步寫乙個字串到檔案中去。建立乙個vs2010 控制台 程式 writefile.cpp 定義控制台應用程式的入口點。include stdafx.h include i...