我正在使用添加了資源ID並基於WM_TIMER消息的定時器。 我想在OnTimer()
上調用像DrunkenDragon()
這樣的程序,但在調用SetTimer(id,10sec,NULL)
後只有一次。我們知道在DrunkenDragon()
例程內調用KillTimer()
將解決此問題。是否可以這樣做,還是我錯過了一些很棒的定時器。setTimer()僅生成WM_TIMER消息一次
0
A
回答
0
int CYourDialog::OnInitDialog()
{
__super::OnInitDialog();
SetTimer(0x10, 10000, NULL);
return true;
}
void CYourDialog::OnTimer(UINT_PTR ignore)
{
DrunkenDragon();
}
並確保您在消息映射中有ON_WM_TIMER
。
0
你不會錯過任何東西,你將不得不使用KillTimer系統停止生成WM_TIMER消息。
您也可以使用CreateTimerQueueTimer並設置參數,只調用一次回調的方式。
0
(僅回答這個萬一別人遇到它像我一樣,是不滿足現有的答案)
所以,在WindowClass.h,你可以做的是一個枚舉您要使用的計時器標識符。雖然您當然可以使用原始數值,但從長遠來看,使用符號可能更容易處理。
class WindowClass : CWnd
{
// other parts of the interface...
protected:
enum
{
TIMER_MAIN_UPDATE = 1,
TIMER_PLASTERED_DRAGON
};
};
同時,後面在WindowClass.cpp,
int WindowClass::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// { ... other initialization code }
// In case you want to do other types of updates at regular intervals.
SetTimer(TIMER_MAIN_UPDATE, 1000, NULL);
// Note the symbolic identifiers.
SetTimer(TIMER_PLASTERED_DRAGON, 10000, NULL);
return 0;
}
,如果你想一直在創建窗口後,連續做10秒只是任何好處,但。您也可以只調用SetTimer的()在其他一些事件處理程序,只要你想:
void WindowClass::OnJustGotPaid()
{
// { ... other handling }
// Since our dragon is a real lightweight, it apparently only takes
// 10 seconds to get him puking up flaming vomit.
SetTimer(TIMER_PLASTERED_DRAGON, 10000, NULL);
}
當談到時間來處理實際的事件,它在Windows的OnTimer()回調通常處理。如果需要,可以通過在SetTimer()的第三個參數中指定一個有效函數指針而不是NULL來將定時器事件定向到不同的(自定義)回調。
void WindowClass::OnTimer(UINT_PTR p_timer_id)
{
switch(p_timer_id)
{
default:
break;
case TIMER_MAIN_UPDATE:
// { ... main update code }
break;
case TIMER_PLASTERED_DRAGON:
// Killing the timer first in case DrunkenDragon() takes a good
// long while for whatever reason.
KillTimer(TIMER_PLASTERED_DRAGON);
DrunkenDragon();
break;
}
}
相關問題
- 1. 顯示消息僅一次
- 2. 只生成一次錯誤消息
- 3. 的SetTimer生成一個隨機IDEvent
- 4. jquery驗證插件。生成隨機成功消息,一次
- 5. 僅第一次生成EF4 POCO類
- 6. 生產批次消息
- 7. Keyup一次顯示成功消息
- 8. 阻止Django消息一次顯示錯誤消息和成功消息
- 9. BackgroundWorker僅取消一次
- 10. C++消息類生成
- 11. 如何生成HL7消息?
- 12. 生成多條消息
- 13. 生成錯誤消息
- 14. mathematica中的消息生成
- 15. SOAP消息生成器
- 16. Django消息框架 - 如何僅顯示成功消息
- 17. 只顯示消息一次
- 18. 如何在Rails中僅顯示一次該Flash消息?
- 19. JavaScript的彈出消息僅出現一次
- 20. 如何僅使用jquery顯示警報消息一次?
- 21. 可達性狀態消息僅出現一次
- 22. 僅在循環中顯示消息框一次vb.net
- 23. 消息僅適用於ASP.NET Web Forms中的第一次請求
- 24. 僅限Android第一次使用的Android藍牙發送消息
- 25. Java套接字:如何僅在DataInputStream中顯示消息一次
- 26. 如何從隊列中僅讀取一次消息
- 27. 使用VBA爲特定的Excel錯誤消息生成消息?
- 28. 消息:許多RemoteServices方法或唯一消息生成器/解釋器?
- 29. 許多生產者和一個消費者一次輪詢所有消息
- 30. 錯誤消息僅閃爍一秒
爲什麼使用資源ID?您可以使用計數器變量來檢查是否第一次啓動定時器。 – Ajay 2012-07-14 04:56:34