C++控制檯程式中使用定時器
轉自部落格:http://www.cnblogs.com/phinecos/archive/2008/03/08/1096691.html
作者:洞庭散人
“我現在專案是一個控制檯程式,用到的Win32API都是與介面無關的,今天需要加入定時器重新整理的功能,由於沒有訊息迴圈,所以WM_TIMER訊息應該如何處理呢?綜合了下網上找到的資料,寫了個簡單的demo,個人以為這種在一個執行緒中建立定時器,再通過指定的回撥函式來處理定時器觸發的模式是比較好的。”
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);
BOOL bRet;
while ((bRet = GetMessage(&msg,NULL,0,0))!=0)
{
if (bRet == -1)
{
printf("Error:the thread will quit,error id is %d/n",GetLastError());
break;
}
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,NULL,0,NULL);
_getch();
return 0;
};
本人在瞭解了作者的意圖以後,也做了一個類封裝:
#include <Windows.h>
#include <stdio.h>
#include <conio.h>
class CTimer
{
public:
CTimer();
void CreateTimerThread(int* pi);
static DWORD CALLBACK TimeThread(PVOID pvoid);
static void CALLBACK TimeProc(HWND hWnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime);
};
CTimer::CTimer()
{
}
void CTimer::CreateTimerThread(int* pi)
{
HANDLE hand = CreateThread(NULL,0,CTimer::TimeThread,pi,0,NULL);
}
DWORD CALLBACK CTimer::TimeThread(PVOID pvoid)
{
int* pi = (int*)pvoid;
int itm = *pi;
MSG msg;
PeekMessage(&msg,NULL,WM_USER,WM_USER,PM_NOREMOVE);
UINT timeid = SetTimer(NULL,111,itm,CTimer::TimeProc);
BOOL bRet;
while ((bRet = GetMessage(&msg,NULL,0,0))!=0)
{
if (bRet == -1)
{
printf("Error:the thread will quit,error id is %d/n",GetLastError());
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
KillTimer(NULL,timeid);
printf("thread end here/n");
return 0;
}
void CALLBACK CTimer::TimeProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
printf("WM_TIMER in work thread count/n");
}
int main()
{
int iTime = 1000;
int* pi = &iTime;
CTimer* ptime = new CTimer;
ptime->CreateTimerThread(pi);
_getch();
return 0;
};
感謝洞庭散人...
相關文章
- c++控制檯程式實現定時器C++定時器
- VC++控制檯程式中使用定時器C++定時器
- Windows控制檯的定時器Windows定時器
- VC++ 控制檯程式中 四種定時器建立方法C++定時器
- c++控制檯寫一個計時器C++
- Win32控制檯程式的定時器實現(轉載)Win32定時器
- C++程式設計_簡易計時器(Timer)的控制檯實現C++程式設計
- C++定時器的使用C++定時器
- C\C++控制檯程式隱藏方法總結C++
- C++ 控制檯讀寫excelC++Excel
- 不一樣的控制檯程式—–在控制檯中輸出圖片薦
- VC中定時器的使用定時器
- 微控制器學習(六)定時器的使用定時器
- 控制檯中動態顯示系統時間
- Docker容器中執行.net framework控制檯程式DockerFramework
- FreeBSD系統中調整控制檯設定(轉)
- spring中定時器的使用Spring定時器
- Qt中的定時器的使用QT定時器
- .net core 控制檯程式使用依賴注入(Autofac)依賴注入
- 控制檯實時檢視 sqlSQL
- Mac OS iTerm 控制檯設定代理Mac
- Chrome控制檯使用詳解Chrome
- 控制檯程式使用ABP框架應用層服務框架
- C# 控制檯應用程式中輸出彩色字型C#
- 在Delphi中捕獲控制檯程式的輸出 (轉)
- 收集Chrome控制檯使用技巧點Chrome
- java 中定時器Java定時器
- 有趣的控制檯玩法:一行程式碼繪製控制檯影像!行程
- java 在控制檯上輸入密碼時,密碼不顯示在控制檯上Java密碼
- 基於51微控制器的定時器定時器
- 網路程式設計定時器二:使用時間輪程式設計定時器
- java-執行 java 控制檯程式Java
- 控制檯程式實現Timer
- 控制檯程式的事件處理 (轉)事件
- C++基於控制檯的迷宮實現(上)C++
- 如何使用阿里雲管理控制檯阿里
- mac下使用mysql控制檯命令列MacMySql命令列
- zookeeper控制檯