定时器的问题main中
_2nDs_Timer timer(1);
int time;
while (running)
{
time = timer.GetTime();
timer.WaitTime(16);
int intime = timer.GetTime() - time;
printf("time_delta : %d\n", intime);
}
定时器类
2nDs_Timer.h#ifndef _2nDs_TIMER_H_
#define _2nDs_TIMER_H_
#include <windows.h>
class _2nDs_Timer
{
private:
HANDLE hTimer;
public:
_2nDs_Timer(BOOL bInit = FALSE);
~_2nDs_Timer(void);
int CreateTimer(void); // 返回负数表示创建失败
int DeleteTimer(int IId);
BOOL IsExist(void);
BOOL WaitTime(int Itime); // 毫秒
int GetTime(void) {return (int)GetTickCount();}//毫秒
};
#endif2nDs_Timer.cpp
#include "2nDs_Timer.h"#if (defined _WIN32) || (defined _WIN64)
_2nDs_Timer::_2nDs_Timer(BOOL bInit)
{
if (FALSE == bInit) hTimer = 0;
else hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
}
_2nDs_Timer::~_2nDs_Timer(void)
{
if (hTimer) CloseHandle(hTimer);
}
int _2nDs_Timer::CreateTimer(void)
{
if (hTimer) return -3;
hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
if (NULL == hTimer) return -1;
return (int)hTimer;
}
int _2nDs_Timer::DeleteTimer(int IId)
{
if (NULL == hTimer) return -1;
if (FALSE == CloseHandle(hTimer)) return -2;
hTimer = 0;
return 1;
}
BOOL _2nDs_Timer::IsExist(void)
{
return (int)hTimer;
}
BOOL _2nDs_Timer::WaitTime(int Itime)
{
if (NULL == hTimer) return -1;
return (BOOL)WaitForSingleObject(hTimer, (DWORD)Itime);
}
#endif不停显示time_delta : %d
数字显示 15,16倒是正常,但是间或的显示 31,32.。这是为啥呢?定时器也不准??
_2nDs_Timer timer(1);
int time;
while (running)
{
time = timer.GetTime();
timer.WaitTime(16);
int intime = timer.GetTime() - time;
printf("time_delta : %d\n", intime);
}
定时器类
2nDs_Timer.h#ifndef _2nDs_TIMER_H_
#define _2nDs_TIMER_H_
#include <windows.h>
class _2nDs_Timer
{
private:
HANDLE hTimer;
public:
_2nDs_Timer(BOOL bInit = FALSE);
~_2nDs_Timer(void);
int CreateTimer(void); // 返回负数表示创建失败
int DeleteTimer(int IId);
BOOL IsExist(void);
BOOL WaitTime(int Itime); // 毫秒
int GetTime(void) {return (int)GetTickCount();}//毫秒
};
#endif2nDs_Timer.cpp
#include "2nDs_Timer.h"#if (defined _WIN32) || (defined _WIN64)
_2nDs_Timer::_2nDs_Timer(BOOL bInit)
{
if (FALSE == bInit) hTimer = 0;
else hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
}
_2nDs_Timer::~_2nDs_Timer(void)
{
if (hTimer) CloseHandle(hTimer);
}
int _2nDs_Timer::CreateTimer(void)
{
if (hTimer) return -3;
hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
if (NULL == hTimer) return -1;
return (int)hTimer;
}
int _2nDs_Timer::DeleteTimer(int IId)
{
if (NULL == hTimer) return -1;
if (FALSE == CloseHandle(hTimer)) return -2;
hTimer = 0;
return 1;
}
BOOL _2nDs_Timer::IsExist(void)
{
return (int)hTimer;
}
BOOL _2nDs_Timer::WaitTime(int Itime)
{
if (NULL == hTimer) return -1;
return (BOOL)WaitForSingleObject(hTimer, (DWORD)Itime);
}
#endif不停显示time_delta : %d
数字显示 15,16倒是正常,但是间或的显示 31,32.。这是为啥呢?定时器也不准??
解决方案 »
- 如何在单文档程序中设置默认保存文档名
- 界面失去焦点,brush无效的问题
- 关于修改状态栏文本
- 程序老是挂起,请高手帮忙解决啊!
- 多线程同步问题, CSingleLock的作用
- 为什么UpdateAllViews会出现ASSERT宏错误呢?在线等,谢谢~~~~~~~~
- 关于CButtonST和cstringarray里保存unicode字符串的两个小问题,一个100分
- 在UNICODE下,用控件DATE TIME PICKER,只要一UPDATEDATA(TRUE)就出错
- 到底怎么使用自定义的全局变量啊?
- 加分~~~~加分?
- SetItems和pCONTENT_ITEMS
- 通过spy++怎样获取工具条内的按钮句柄?
你这个定时器线程本身优先级不高,所以可能很久都没时间片运行.
所以这样使用定时器,想毫秒级的准确,有难度