Russian Qt Forum
Ноябрь 22, 2024, 19:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Exception при вызове CloseHandle  (Прочитано 6231 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Май 08, 2009, 13:11 »

Доброго дня!

Я тут занялся написанием класса для работы с последовательными портами в Windows!

и вот при реализации ф-ции void TWinSerialDevice::close() у меня приложение вылетает !

Код:
void TWinSerialDevice::close() {
    if ((hd!=INVALID_HANDLE_VALUE) && (oldSettingsIsSaved) && isOpen()) {
        //восстанавливаем старые сохраненные параметры устройства
        if (SetCommConfig(hd, &oldcc, sizeof(COMMCONFIG))==0) {
            TTY_PORTABILITY_DEBUG("TWinSerialDevice::close->SetCommConfig(oldcc)! Error!");
        }
        if (CloseHandle(hd)==0) { ///  ВОТ ТУТ ВЫЛЕТАЕТ!!!!!
            TTY_PORTABILITY_DEBUG("TWinSerialDevice::close->CloseHandle! Error!");
        }
    }//if isOpen() &&&&&
    QIODevice::close();
}

Я уже замучался и не знаю от чего это ??!! Помогите разобраться! Грустный
« Последнее редактирование: Май 08, 2009, 14:11 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Май 08, 2009, 14:10 »

Хотя вот тут : http://www.vsokovikov.narod.ru/New_MSDN_API/Handles_objects/fn_closehandle.htm

написано
Цитировать
...
Эта функция породит исключительную ситуацию, если или значение дескриптора, которое не допустимо (или 0) или значение псевдо-дескриптора, задается как значение hObject, а приложение запущено в среде отладчика. Это включает в себя закрытие дескриптора дважды и использование функции CloseHandle для дескриптора, возвращенного функцией FindFirstFile.
...
Обратите внимание! на то, что эта функция не будет порождать исключительную ситуацию тогда, когда значение дескриптора, которое не допустимо или значение псевдо-дескриптора, задается, а приложение не запущено в среде отладчика.

и как это понять?
Записан

ArchLinux x86_64 / Win10 64 bit
Tonal
Гость
« Ответ #2 : Май 12, 2009, 11:26 »

Под отладчиком CloseHandle возбуждает исключение если параметр косячный.
Без отладчика исключения не будет и сработает твой if.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Май 12, 2009, 12:02 »

Хм...  странно как то всё, т.к. я использую асинхронный режим работы последовательного порта и такую переменную как OVERLAPPED ,
и когда я писал в коде так:
Код:
.....
OVERLAPPED ovl;
.....
то приложение вылетало с эксепшеном, но но когда я писал так:
Код:
.....
OVERLAPPED ovl;
Zeromemory(&ovl, sizeof(ovl));
.....
то вылетать перестало

Улыбающийся мистика !
Записан

ArchLinux x86_64 / Win10 64 bit
crackedmind
Гость
« Ответ #4 : Май 12, 2009, 13:52 »

Цитировать
мистика !
вообще то не мистика )
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.