我需要计时器每1秒启动一次功能。
我已尝试SetTimer
,我的代码:
const UINT_PTR TIMER_ID = 1000;
DWORD DownloadThread()
{
SetTimer(NULL, TIMER_ID, 1000, (TIMERPROC)DownloadSpeedCounter);
/*some stuff*/
}
void DownloadSpeedCounter()
{
/*some stuff*/
}
我无法编译此代码并获得error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'TIMERPROC'
它也是类成员方法。
答案 0 :(得分:2)
这是因为您尝试将普通函数用作应用程序定义的回调函数。你可能正在寻找的是这个应用程序定义的回调函数,它看起来像这样:
VOID CALLBACK DownloadSpeedCounter(
HWND hwnd, // handle to window for timer messages
UINT message, // WM_TIMER message
UINT idTimer, // timer identifier
DWORD dwTime) {
/* some stuff */
}
有关使用定时器回调函数的其他信息,请参阅this article。
答案 1 :(得分:1)
其中一个问题是TIMERPROC
函数应该如下所示:typedef VOID (CALLBACK* TIMERPROC)(HWND, UINT, UINT_PTR, DWORD);
所以你的方法定义应如下所示:
VOID CALLBACK DownloadSpeedCounter(HWND, UINT, UINT_PTR, DWORD);
此外,由于这是一种方法,而不仅仅是一个函数,它必须是static
。所以它调用static
,但可以使用私有非静态数据this technique.