lpClientData参数中的C ++ WinSnmp回调函数和对象地址

时间:2013-09-12 11:28:58

标签: c++ winapi winsnmp

我的c ++类使用WinSnmp从设备获取整数值。 会话初始化如下:

snmpident::snmpident(const char* c, const char* si, const char* i,const char* o)
{...
sesshandle=SnmpCreateSession(NULL,NULL,snmpgetCB,this);
...}

所以,我在回调函数中接收类对象的地址,即使用它来调用该对象的方法:

SNMPAPI_STATUS CALLBACK snmpgetCB(HSNMP_SESSION hSession,HWND hWnd,  //callback func
    UINT wMsg,WPARAM wParam,LPARAM lParam,LPVOID lpClientData)
{...
reinterpret_cast<snmpident*>(lpClientData)->recv(sv.value.sNumber); //recv is an "snmpident" class method
...}

如您所见,如果类的用户(在本例中为I)在回调函数完成其工作之前删除了类对象,则可能导致“访问冲突”。 我怎样才能解决这个问题? 睡觉()看起来很难看。 {pointer; session id}结构的数组看起来有点令人感兴趣,但我不确定,它是最好的选择。

P.S。请原谅我的英语。

0 个答案:

没有答案