我在VS2008下无论是用OnTimer() 还是用timeSetEvent()制作的秒表 到板子上运行的时候不准 在板子上速度走的比较快。。。(大概快2倍多)
----------------------------------------------------------------------
.h
class MixWork : public CDialog
{
public:
UINT m_TimID;
Yu_Input My_Input;
protected:
virtual void OnMMTimer();//声明要回调的成员方法
//作为回调函数的静态方法
static void CALLBACK TimerCallBack(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
MixWork * pThis=(MixWork*)dwUser;//由this指针获得实例的指针
pThis->OnMMTimer();//调用要回调的成员方法
}
}
----------------------------------------------------------------------
.cpp
void MixWork::OnBnClickedSure()
{
// TODO: Add your control notification handler code here
//::SetTimer(GetSafeHwnd(),1,100,NULL);(这是之前使用OnTimer() 留下的)
TIMECAPS tc;
//定义分辨率
UINT wAccuracy;
if(timeGetDevCaps(&tc,sizeof(TIMECAPS))==TIMERR_NOERROR)
{
//分辨率的值不能超出系统的取值范围
wAccuracy=min(max(tc.wPeriodMin, 1),tc.wPeriodMax);
//调用timeBeginPeriod函数设置定时器的分辨率
timeBeginPeriod(wAccuracy);
//设置定时器
}
m_TimID=timeSetEvent(1000,0,&TimerCallBack,(DWORD)this,1);
}
void MixWork::OnMMTimer()
{
if (m_alls==59)
{
m_alls=0;//秒
if (m_allm==59)
{
++m_allH;//小时
m_allm=0;//分
}
else
{
++m_allm;
}
}
else
{
++m_alls;
}
CDialog::UpdateData(FALSE);
}
--------------------------------------------------------
老大们帮帮忙~~~ 我用OnTimer() 做也是快2倍多 ,我还用OnTimer() 做了个直接在PC上运行的Damo 效果很好 |