1

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

它也是类成员方法。

4

2 回答 2

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 */
}

有关使用计时器回调函数的更多信息,请参阅这篇文章

于 2013-08-19T10:43:46.983 回答
1

问题之一是TIMERPROC函数应该是这样的:typedef VOID (CALLBACK* TIMERPROC)(HWND, UINT, UINT_PTR, DWORD);所以你的方法定义应该是这样的:

VOID CALLBACK DownloadSpeedCounter(HWND, UINT, UINT_PTR, DWORD);

此外,由于这是一个方法,而不仅仅是一个函数,它必须是static. 所以它调用类似static但访问私有非静态数据可能会使用这种技术。

于 2013-08-19T11:04:28.580 回答