定时回调函数 访问类非静态成员的问题
类的一个静态函数
CALLBACK MyTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);
作为定时回调函数。
通过定义一个静态类指针pThis可以访问类非静态成员的问题,但只适合于只有一个类的实例的情况。
还是一个较好的解决方案是用映射表存所有对象地址的方法,类似于
typedef CMap<UINT,UINT,A*,A*> CAMap;
class A()
{
static void a(); //静态回调函数
void b(); //非静态函数
int m_ID; //本对象在列表中的ID号
static CAMap m_Map; //静态对象映射表
}
CAMap A::m_Map;
A::A() //构造函数中将this指针赋给pThis,使得回调函数能通过pThis指针访问本对象
{
m_ID=m_Map.GetCount()+1;
m_Map.SetAt( m_ID, this );
}
void A::a()
{
A * pThis=NULL;
m_Map.Lookup(m_ID?????,pThis);
{
pThis->b(); //回调函数中调用非静态函数
};
问题来了,m_Map.Lookup(m_ID?????,pThis);这里,怎么通过键找到对象指针?直接访问m_ID是不行的,m_ID又是类非静态成员,似乎进入了一个死循环。问题的实质是怎么设置一个键,这个键静态的映射表又能有效访问到,望指教。