Dahua NetSDK Error 10: NET_SDK_UNINIT_ERROR — сбой деинициализации CLIENT_Cleanup
- Функция
CLIENT_CleanupвозвращаетFALSEс кодом10(NET_SDK_UNINIT_ERROR). - Зависание процесса при завершении работы программы.
- Утечки неуничтоженных системных потоков и блокировок мьютексов.
1. Корректный порядок освобождения ресурсов
Перед вызовом CLIENT_Cleanup необходимо принудительно завершить все активные трансляции, подписки на события и выйти со всех устройств:
void ShutdownSDK() {
// 1. Остановка всех видеопотоков
if (g_hPlay != 0) {
CLIENT_StopRealPlayEx(g_hPlay);
g_hPlay = 0;
}
// 2. Остановка прослушивания тревог
if (g_hAlarm != 0) {
CLIENT_StopListen(g_hAlarm);
g_hAlarm = 0;
}
// 3. Выход со всех устройств
if (g_lLoginID != 0) {
CLIENT_Logout(g_lLoginID);
g_lLoginID = 0;
}
// 4. Финальная деинициализация SDK
CLIENT_Cleanup();
}2. Завершение работы пользовательских коллбэков
Убедитесь, что ваши функции обработки кадров (fRealDataCallBack) завершили выполнение и не блокируют потоки SDK.
Частые вопросы (FAQ)
Чем опасен вызов CLIENT_Cleanup при активных сессиях?
Принудительное уничтожение SDK при работающих сетевых сокетах может привести к Segmentation Fault или Access Violation в памяти процесса.
Что делать, если CLIENT_Cleanup блокирует главный поток?
Это происходит, если сетевой поток ожидает таймаута сокета. Перед вызовом Cleanup убедитесь, что все операции ввода-вывода остановлены.
Можно ли снова вызвать CLIENT_Init после CLIENT_Cleanup?
Да, SDK поддерживает повторный жизненный цикл инициализации в рамках одного процесса.
Нужно ли вызывать CLIENT_Cleanup при аварийном завершении по сигналу?
В обработчиках критических сигналов (SIGSEGV) вызывать Cleanup не рекомендуется — ОС освободит ресурсы автоматически.