关于定时器
各位大哥,关于定时器的实现和应用,请大家帮我看看,下面两段代码有什么不同,为什么一个能实现定时功能,一个不能实现.
不能实现的如下:
#include <windows.h>
#include <process.h>
#include <stdio.h>
VOID CALLBACK TimerHandler( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
printf("ok!\n");
}
class clsTimer{
public:
static int setOneTimer(int nInterval, TIMERPROC taskFun);
void start();
static void gTaskThreadFunc(LPVOID pParam);
};
void clsTimer::start()
{
Sleep(1000);
_beginthread(gTaskThreadFunc, 0, NULL);
}
void clsTimer::gTaskThreadFunc(LPVOID pParam)
{
// setOneTimer(1000, (TIMERPROC)TimerHandler);
while(true)
{
MSG message;
Sleep(1);
while (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}
}
}
int clsTimer::setOneTimer(int nInterval, TIMERPROC taskFun)
{
return SetTimer(NULL, 0, nInterval, taskFun);
}
int main()
{
clsTimer ct;
ct.setOneTimer(1000, (TIMERPROC)TimerHandler);
ct.start();
while(1)
{
Sleep(1000);
}
return 0;
}
能实现的如下:
#include <windows.h>
#include <process.h>
#include <stdio.h>
VOID CALLBACK TimerHandler( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
printf("ok!\n");
}
class clsTimer{
public:
static int setOneTimer(int nInterval, TIMERPROC taskFun);
void start();
static void gTaskThreadFunc(LPVOID pParam);
};
void clsTimer::start()
{
Sleep(1000);
_beginthread(gTaskThreadFunc, 0, NULL);
}
void clsTimer::gTaskThreadFunc(LPVOID pParam)
{
setOneTimer(1000, (TIMERPROC)TimerHandler);
while(true)
{
MSG message;
Sleep(1);
while (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}
}
}
int clsTimer::setOneTimer(int nInterval, TIMERPROC taskFun)
{
return SetTimer(NULL, 0, nInterval, taskFun);
}
int main()
{
clsTimer ct;
// ct.setOneTimer(1000, (TIMERPROC)TimerHandler);
ct.start();
while(1)
{
Sleep(1000);
}
return 0;
}
拜托大家了,如果解答得好,兄弟再开贴给分,绝不食言。两段代码的区别是setOneTimer(1000, (TIMERPROC)TimerHandler); 的位置不同