VC++控制台程序中使用定时器
生活随笔
收集整理的這篇文章主要介紹了
VC++控制台程序中使用定时器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?我現在項目是一個控制臺程序,用到的Win32API都是與界面無關的,今天需要加入定時器刷新的功能,由于沒有消息循環,所以WM_TIMER消息應該如何處理呢?綜合了下網上找到的資料,寫了個簡單的demo,個人以為這種在一個線程中創建定時器,再通過指定的回調函數來處理定時器觸發的模式是比較好的。
#include???<windows.h>???
#include???<stdio.h>???
#include???<conio.h>???
int???count???=0;???
VOID?CALLBACK?TimerProc(HWND?hwnd,UINT?uMsg,UINT_PTR?idEvent,DWORD?dwTime)
{
????count++;???
????printf("WM_TIMER???in???work???thread???count=%d\n",count);???
}
DWORD?CALLBACK???Thread(PVOID???pvoid)???
{???
????MSG??msg;???
????PeekMessage(&msg,NULL,WM_USER,WM_USER,PM_NOREMOVE);???
????UINT??timerid=SetTimer(NULL,111,3000,(TIMERPROC)TimerProc);???
????BOOL??bRet;???
????
????while(???(bRet?=?GetMessage(&msg,NULL,0,0))!=???0)???
????{?????
????????if(bRet==-1)???
????????{???
????????????//???handle???the???error???and???possibly???exit???
????????}???
????????else???
????????{????
????????????TranslateMessage(&msg);?????
????????????DispatchMessage(&msg);?????
????????}???
????}???
????KillTimer(NULL,timerid);???
????printf("thread???end???here\n");???
????return???0;???
}
int????main()???
{???
????DWORD???dwThreadId;???
????printf("use???timer???in???workthread???of???console???application\n");???
????HANDLE???hThread??=????CreateThread(NULL,0,Thread,0,0,&dwThreadId);
????_getch();?
????return?0;
}? ?
轉載于:https://www.cnblogs.com/winkyao/archive/2012/02/17/2355536.html
總結
以上是生活随笔為你收集整理的VC++控制台程序中使用定时器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2012需要一种智慧
- 下一篇: 编写Ogre插件的一般方法