Моя проблема в том, что у меня есть обратный вызов, который вызывается после того, как моя основная тема удалила объект, содержащий функцию-член, которую обратный вызов хочет вызвать.Поэтому моя программа вылетает.Есть ли способ притвориться о катастрофе?Я не могу изменить поток моей основной темы.
Мой основной поток запускает новый поток для определенной задачи и ожидает в диалоговом окне.Если пользователь нажимает кнопку отмены до выполнения задачи (сканирование по Bluetooth), основная тема продолжается и удаляет объект, необходимый для обратного вызова, для вызова.
typedef std::tr1::function<void __cdecl ()>* callback_function;
callback_function m_bluetoothScan = //Some function in native C++
// The c++/cli callback
void Connection::BluetoothScanCallback(IAsyncResult^ ar)
{
if (m_bluetoothScan != nullptr)
{
(*m_bluetoothScan)(); // The native c++ member function
}
}
ОБНОВЛЕНИЕ:
Как указал @xMRi, мне пришлось отменить регистрацию моего обратного вызова внутри деструктора.Что я сделал, установив callback_function
на nullptr
и внутри моей BluetoothScanCallback
функции на стороне CLI, я проверяю, является ли m_bluetoothScan
nullptr
и, таким образом, не пытаюсь вызвать мой обратный вызов.Большое спасибо!