VC++控制檯程式中使用定時器
http://blog.chinaunix.net/uid-20437338-id-1946459.html
我現在專案是一個控制檯程式,用到的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);
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;
}
#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)
{
// 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;
}
用執行緒實現定時器:
http://blog.csdn.net/markman101/article/details/6220295
#include "stdafx.h"
#include<iostream>
#include<windows.h>
using namespace std;
void CALLBACK TimeProc(
HWND hwnd,
UINT message,
UINT idTimer,
DWORD dwTime);
int main()
{
int sen = SetTimer(NULL,1,1000,TimeProc);
//Sleep(5000);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
if(msg.message==WM_TIMER)
{
DispatchMessage(&msg);
cout<<"kill定時器!"<<endl;
KillTimer(NULL, sen);
}
}
return 0;
}
void CALLBACK TimeProc(
HWND hwnd,
UINT message,
UINT idTimer,
DWORD dwTime)
{
cout<<"觸發定時器!"<<endl;
}
#include<iostream>
#include<windows.h>
using namespace std;
void CALLBACK TimeProc(
HWND hwnd,
UINT message,
UINT idTimer,
DWORD dwTime);
int main()
{
int sen = SetTimer(NULL,1,1000,TimeProc);
//Sleep(5000);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
if(msg.message==WM_TIMER)
{
DispatchMessage(&msg);
cout<<"kill定時器!"<<endl;
KillTimer(NULL, sen);
}
}
return 0;
}
void CALLBACK TimeProc(
HWND hwnd,
UINT message,
UINT idTimer,
DWORD dwTime)
{
cout<<"觸發定時器!"<<endl;
}
相關文章
- VC++ 控制檯程式中 四種定時器建立方法C++定時器
- C++控制檯程式中使用定時器C++定時器
- c++控制檯程式實現定時器C++定時器
- Windows控制檯的定時器Windows定時器
- Win32控制檯程式的定時器實現(轉載)Win32定時器
- c++控制檯寫一個計時器C++
- 不一樣的控制檯程式—–在控制檯中輸出圖片薦
- VC中定時器的使用定時器
- 微控制器學習(六)定時器的使用定時器
- 控制檯中動態顯示系統時間
- Docker容器中執行.net framework控制檯程式DockerFramework
- FreeBSD系統中調整控制檯設定(轉)
- spring中定時器的使用Spring定時器
- Qt中的定時器的使用QT定時器
- .net core 控制檯程式使用依賴注入(Autofac)依賴注入
- 控制檯實時檢視 sqlSQL
- Mac OS iTerm 控制檯設定代理Mac
- Chrome控制檯使用詳解Chrome
- 控制檯程式使用ABP框架應用層服務框架
- C++程式設計_簡易計時器(Timer)的控制檯實現C++程式設計
- C# 控制檯應用程式中輸出彩色字型C#
- 在Delphi中捕獲控制檯程式的輸出 (轉)
- 收集Chrome控制檯使用技巧點Chrome
- VC++ MFC程式設計版本資訊控制C++C程式程式設計
- java 中定時器Java定時器
- 有趣的控制檯玩法:一行程式碼繪製控制檯影像!行程
- java 在控制檯上輸入密碼時,密碼不顯示在控制檯上Java密碼
- 基於51微控制器的定時器定時器
- 網路程式設計定時器二:使用時間輪程式設計定時器
- java-執行 java 控制檯程式Java
- 控制檯程式實現Timer
- 控制檯程式的事件處理 (轉)事件
- 如何使用阿里雲管理控制檯阿里
- mac下使用mysql控制檯命令列MacMySql命令列
- zookeeper控制檯
- VC++中STL的使用 (轉)C++
- JAVA控制檯下:控制檯商城購物系統Java
- java定時器的使用Java定時器