ST3
ST3

Reputation: 8946

WinApi SetTimer cannot compile

I need timer to start function every 1 second.

I have tried SetTimer, my code:

const UINT_PTR TIMER_ID = 1000;

DWORD DownloadThread()
{
    SetTimer(NULL, TIMER_ID, 1000, (TIMERPROC)DownloadSpeedCounter);
    /*some stuff*/
}

void DownloadSpeedCounter()
{
    /*some stuff*/
}

I cannot compile this code and get error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'TIMERPROC'

Also it is class member method.

Upvotes: 1

Views: 552

Answers (2)

ST3
ST3

Reputation: 8946

One of the problems is that TIMERPROC functions should look like this: typedef VOID (CALLBACK* TIMERPROC)(HWND, UINT, UINT_PTR, DWORD); So your method definition should look like this:

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

Also, as this is a method, not just a function, it must be static. So it is calling like static but to access private non-static data may be used this technique.

Upvotes: 1

Floris Velleman
Floris Velleman

Reputation: 4888

This is because you are trying to use a normal function as an application-defined callback function. What you are probably looking for is this application-defined callback function which could look like this:

VOID CALLBACK DownloadSpeedCounter( 
HWND hwnd,        // handle to window for timer messages 
UINT message,     // WM_TIMER message 
UINT idTimer,     // timer identifier 
DWORD dwTime) {
     /* some stuff */
}

For additional information on using callback functions for timers see this article.

Upvotes: 2

Related Questions