我的 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)在回调函数完成其工作之前删除了类对象,则可能导致“访问冲突”。我怎样才能解决这个问题?Sleep() 看起来很难看。{pointer;session id} 结构数组看起来有点有趣,但我不确定它是否是最佳选择。
PS请原谅我的英语。