winapi — функция обратного вызова WinSnmp C ++ и адрес объекта в параметре lpClientData

Мой класс 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} выглядит немного интересным, но я не уверен, что это лучший выбор.

Постскриптум Пожалуйста, прости меня за мой английский.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]