关于非窗口类的定时器问题,在线等

时间:2021-06-29 00:13:48
MFC,三个函数我是这样写的,编译通过,但就是不进入回调函数内,不知道是什么原因
我这个类是窗口类创建的,但不是继承的CWND,继承interface ICommonTask{}
SetMyTimer(1000);
void CDownLoad::SetMyTimer(UINT nElapse)
{
m_nTimerID = SetTimer(NULL,NULL,nElapse,MyTimerProc);
m_sTimeMap[m_nTimerID] = this;
}

void CALLBACK CDownLoad::MyTimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
((CDownLoad *)m_sTimeMap[nTimerid])->DeviceUpdateProgess();
}

6 个解决方案

#1


一个简单的例子:

#include "stdafx.h"

#include <Windows.h>

VOID CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
static int i = 0;
printf("========%d========\r\n", i++);
}

int _tmain(int argc, _TCHAR* argv[])
{
SetTimer(NULL, NULL, 1000, TimerProc);

MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

#2


引用 1 楼 visualeleven 的回复:
一个简单的例子:

C/C++ code


#include "stdafx.h"

#include <Windows.h>

VOID CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
    static int i = 0;
    printf("========……


我程序的问题在哪

#3


你既然把回调函数放到了类中,这个回调函数应该是静态的,你是不是这样做的?
再则,你SetMyTimer函数执行了吗?
如果以上都没问题,试试下面的:
::SetTimer(NULL, NULL, nElapse, (TIMERPROC)MyTimerProc);

#4


m_nTimerID = SetTimer(NULL,NULL,nElapse,MyTimerProc);
MyTimerProc是成员函数,SetTimer的回调函数不接受成员函数,你怎么编译通过的?
难道是你 #define CALLBACK static

#5


MyTimerProc 应该是要改成static的

#6


当然是静态的

#1


一个简单的例子:

#include "stdafx.h"

#include <Windows.h>

VOID CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
static int i = 0;
printf("========%d========\r\n", i++);
}

int _tmain(int argc, _TCHAR* argv[])
{
SetTimer(NULL, NULL, 1000, TimerProc);

MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

#2


引用 1 楼 visualeleven 的回复:
一个简单的例子:

C/C++ code


#include "stdafx.h"

#include <Windows.h>

VOID CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
    static int i = 0;
    printf("========……


我程序的问题在哪

#3


你既然把回调函数放到了类中,这个回调函数应该是静态的,你是不是这样做的?
再则,你SetMyTimer函数执行了吗?
如果以上都没问题,试试下面的:
::SetTimer(NULL, NULL, nElapse, (TIMERPROC)MyTimerProc);

#4


m_nTimerID = SetTimer(NULL,NULL,nElapse,MyTimerProc);
MyTimerProc是成员函数,SetTimer的回调函数不接受成员函数,你怎么编译通过的?
难道是你 #define CALLBACK static

#5


MyTimerProc 应该是要改成static的

#6


当然是静态的