90 WMTT_SETTIMER = WM_APP,
91 WMTT_KILLTIMER = WM_APP + 1,
102 TParam(UINT uEla, LPARAM lp) : uTimerId(0), uElapse(uEla), lParam(lp)
123 virtual bool OnThreadDispatchReceive(UINT nMsg, WPARAM wParam, LPARAM lParam)
129 TParam* P =
reinterpret_cast<TParam*
>(lParam);
130 UINT_PTR i =
::SetTimer(NULL, 0, P->uElapse,
reinterpret_cast<TIMERPROC
>(P->lParam));
133 P->eventSuccess.Unlock();
140 ASSERTLIB(m_piListener != NULL);
141 ASSERTLIB(m_pcTimer != NULL);
142 return m_piListener->OnTimer(wParam, lParam, *m_pcTimer);
150 virtual void OnThreadDispatchSetup(
void)
152 ASSERTLIB(m_piListener != NULL);
153 m_piListener->OnSetup();
155 IParentListener* m_piListener;
159 friend class CTimerDispatch::CListener;
161 CListener m_listener;
164 struct TDefaultListener : IListener
179 m_listener.Set(
this, &m_lisDef);
197 m_listener.Set(
this, (P != NULL) ? P : &m_lisDef);
209 if ( lpszName == NULL) { lpszName = _T(
"TimerDispatch:MessagePump"); }
211 return m_dispatch.
Start(lpszName);
221 return m_dispatch.
Stop();
231 UINT_PTR
SetTimer(UINT uElapse, LPARAM lParam = 0)
const
233 if ( m_dispatch.
GetThreadId() == ::GetCurrentThreadId() )
235 return ::SetTimer(NULL, 0, uElapse,
reinterpret_cast<TIMERPROC
>(lParam));
237 TParam t(uElapse, lParam);
238 if ( m_dispatch.
PostMessage(WMTT_SETTIMER, 0,
reinterpret_cast<LPARAM
>(&t)) )
240 t.eventSuccess.Lock();
254 if ( m_dispatch.
GetThreadId() == ::GetCurrentThreadId() )
258 return m_dispatch.
PostMessage(WMTT_KILLTIMER, 0, uTimerId);
282 virtual bool OnTimer(UINT_PTR uTimerId, LPARAM lParam)
284 ASSERT0(
false,
"CTimerDispatch",
"継承もリスナ登録も行われずに使用されています。");
289 friend class CTimerDispatchTest;
void ToLock(void)
[排他] ロック状態にする
CThreadStatus & ReferThreadStatus(void)
[参照] 処理スレッド状態参照.
bool PostMessage(UINT nMsg, WPARAM wParam=0, LPARAM lParam=0) const
[設定] スレッドへPostMessage
void SetListener(IListener *piListener)
[登録] リスナー登録
bool Start(LPCTSTR lpszName=NULL)
[設定] スレッド開始
DWORD GetThreadId(void) const
[取得] スレッドのID取得
bool Stop(void)
[設定] スレッド停止
CThreadStatus & ReferThreadStatus(void)
[参照] 処理スレッド状態参照.
void SetListener(IListener *P)
[登録] リスナー登録
virtual ~CTimerDispatch(void)
デストラクタ
virtual bool OnTimer(UINT_PTR uTimerId, LPARAM lParam)
[通知] タイマー発生.
UINT_PTR SetTimer(UINT uElapse, LPARAM lParam=0) const
[設定] タイマーセット
bool Start(LPCTSTR lpszName=NULL)
[設定] スレッド開始
CTimerDispatch(void)
コンストラクタ
bool KillTimer(UINT_PTR uTimerId) const
[設定] タイマー破棄
bool Stop(void)
[設定] スレッド停止
virtual ~IListener(void)
デストラクタ
virtual bool OnTimer(UINT_PTR uTimerId, LPARAM lParam, const CTimerDispatch &timer)=0
[通知] タイマー発生.
virtual void OnSetup(void)
[通知] 開始通知.