我的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。请原谅我的英语。