WinApi SetTimer无法编译

时间:2013-08-19 10:36:45

标签: c++ windows winapi casting

我需要计时器每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'

它也是类成员方法。

2 个答案:

答案 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.