0

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

4

0 回答 0