一个SetTimer函数回调函数的问题
VOID CALLBACK TimeProc1(HWND hwnd, UINT uMsg, UINT_PTR idEvent,
DWORD dwTime)
{
::AfxMessageBox("SDGsdfg");
}
VOID CALLBACK CTestTimer::TimeProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent,
DWORD dwTime)
{
char buf[32]; sprintf(buf, "%d", m_timer);
::AfxMessageBox(buf);
}
int CTestTimer::Execute()
{
m_timer = SetTimer(NULL, 0, 3000, TimeProc);//这句编译出错
m_timer = SetTimer(NULL, 0, 3000, TimeProc1);//这句可以通过
return 0;
}
在编译出错的那句 使用强制转换也通不过,错误提示是:
不能将'void (struct HWND__ *,unsigned int,unsigned int,unsigned long)' 转换为:
'void (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,unsigned long)'
可是TimeProc这个成员方法明明就是__stdcall的调用方式啊!
这种方式在C++Builder下面编译可以通过,请高手给一个解决方案,谢谢
DWORD dwTime)
{
::AfxMessageBox("SDGsdfg");
}
VOID CALLBACK CTestTimer::TimeProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent,
DWORD dwTime)
{
char buf[32]; sprintf(buf, "%d", m_timer);
::AfxMessageBox(buf);
}
int CTestTimer::Execute()
{
m_timer = SetTimer(NULL, 0, 3000, TimeProc);//这句编译出错
m_timer = SetTimer(NULL, 0, 3000, TimeProc1);//这句可以通过
return 0;
}
在编译出错的那句 使用强制转换也通不过,错误提示是:
不能将'void (struct HWND__ *,unsigned int,unsigned int,unsigned long)' 转换为:
'void (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,unsigned long)'
可是TimeProc这个成员方法明明就是__stdcall的调用方式啊!
这种方式在C++Builder下面编译可以通过,请高手给一个解决方案,谢谢
...全文
相关推荐
怎么往SetTimer的回调函数传递参数
问题来了:如何将参数传递给 SetTimer 的回调函数?这需要使用一个技巧,即将参数封装到一个结构体中,然后将结构体的地址传递给 SetTimer 函数。
cSharp-settimer.zip_C settimer killtimer_C# settimer
为了实现这个功能,你需要定义一个定时器回调函数,它将在定时器触发时被调用。
callback回调函数
**线程安全**:如果回调函数可能在多个线程中被调用,则需要确保其线程安全,避免数据竞争导致的问题。3. **避免死锁**:在回调函数中调用可能会再次触发回调的方法可能导致死锁问题,需要谨慎设计。
定义timer回调函数的方法
我们需要在回调函数中判断是否需要重新设置定时器,以实现周期性行为。5. 错误处理:即使在回调函数中,也要处理可能出现的错误情况,比如资源不足、权限问题等。
vc 回调函数的样例
在Visual C++(VC)中,回调函数通常涉及到Win32 API,如SetWindowLong、SetTimer或RegisterClass等函数,它们需要一个函数指针作为参数,这个函数指针指向的就是回调函数


