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

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

Страниц: 1 ... 17 18 [19] 20 21 ... 88   Вниз
  Печать  
Автор Тема: Создаю библиотеку для работы с последовательными портами. [УШЕЛ ИЗ ПРОЕКТА].  (Прочитано 752741 раз)
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #270 : Декабрь 22, 2010, 19:36 »

Потому что если открыть порт и выдернуть его - то из этой ветки устройство не исчезнет! На crossplatform.ru уже обсуждали.

Интересно, никогда не наблюдал такого. Кинь ссылку на топик.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #271 : Декабрь 22, 2010, 19:53 »

Тут: http://www.forum.crossplatform.ru/index.php?showtopic=3012&hl=SERIALCOMM&st=40
см. начиная с поста №44 и далее.. №56 и т.п.
Записан

ArchLinux x86_64 / Win10 64 bit
Hvzh
Гость
« Ответ #272 : Декабрь 24, 2010, 10:58 »

kuzulis,

Попытался скомпилировать Вашу библиотеку под Виндозой используя MSVC 8.0. Компайлер споткнулся на файле nativeserialengine_win.cpp вот на этой строке:

   
Код:
 if (::WriteFile(this->descriptor, (PCVOID)data, (DWORD)len, &writeBytes, &this->oWrite))
 


Ему не понравился PCVOID. Все скомпилячилось после замены на LPCVOID. Как я понимаю, PCVOID - это приблуда mingw, для мелкософтовских компайлеров неприемлимая
Записан
Barmaglodd
Гость
« Ответ #273 : Декабрь 24, 2010, 11:34 »

Абсолютно точно надо через создание окна ловить события. Сам делал так (правда через QWindow и winEvent), т.к. с QWinEventNotifier (в вашей старой реализации Улыбающийся ) периодический access violation в недрах системы обработки событий Qt при извлечении устройства. К тому же такая реализация проще для понимания, а в QWinEventNotifier чёрт ногу сломит.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #274 : Декабрь 24, 2010, 11:52 »

Цитата: Hvzh
Ему не понравился PCVOID. Все скомпилячилось после замены на LPCVOID. Как я понимаю, PCVOID - это приблуда mingw, для мелкософтовских компайлеров неприемлимая
Ок, исправлю.

Цитата: Barmaglodd
Абсолютно точно надо через создание окна ловить события. Сам делал так (правда через QWindow и winEvent), т.к. с QWinEventNotifier (в вашей старой реализации Улыбающийся ) периодический access violation в недрах системы обработки событий Qt при извлечении устройства. К тому же такая реализация проще для понимания, а в QWinEventNotifier чёрт ногу сломит.
Наоборот, через QWinEventNotifier  проще!
Тем более, QWinEventNotifier  используется в AbstractSerial для уведомлений для сигналов readyRead, dtrChanged и т.п.

Цитировать
периодический access violation в недрах системы обработки событий Qt
так нужно смотреть от чего это.

Я что то передумал что-то менять QWinEventNotifier на WM_blabla, т.к. всё-равно WM_blabla - это костыль (ИМХО).  Улыбающийся
Понятно, что если отказываться от приватных методов, то заменить в классе SerialDeviceEnumerator  на WM_blabla в принципе можно, НО
не чем заменить QWinEventNotifier в классе AbstractSerial!

Мда, дилема.
Записан

ArchLinux x86_64 / Win10 64 bit
Barmaglodd
Гость
« Ответ #275 : Декабрь 24, 2010, 12:05 »

так нужно смотреть от чего это.
Я уже не найду этот код.
Вспомнил, я уже писал об этом http://www.prog.org.ru/index.php?topic=9537.msg65014#msg65014

чем заменить QWinEventNotifier в классе AbstractSerial!
Я заменил на поток, блокирующий IO и поллинг. Но это для моего узкого случая. Улыбающийся
« Последнее редактирование: Декабрь 24, 2010, 12:12 от Barmaglodd » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #276 : Декабрь 24, 2010, 12:21 »

Цитировать
Я заменил на поток, блокирующий IO и поллинг. Но это для моего узкого случая.
Допустим 20 ком портов, тогда придется создавать 20 потоков!? Подмигивающий
Записан

ArchLinux x86_64 / Win10 64 bit
Barmaglodd
Гость
« Ответ #277 : Декабрь 24, 2010, 12:31 »

У меня сейчас в firefox'е 24 потока. Подмигивающий И я же не говорю, что это универсальное решение.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #278 : Декабрь 25, 2010, 19:57 »

>>Интересно, никогда не наблюдал такого. Кинь ссылку на топик.
Речь идёт об устройствах типа USB<->RS-485, кода пользователь выдёргивает на горячую такой переходник, то программисту хотелось бы иметь возможность отследить эту ситуацию
Записан

Юра.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #279 : Декабрь 26, 2010, 14:33 »

Покопаюсь как будет время с своих исходниках, вроде такой проблемы у нас не было.  Мы работали с IrDA-tp-COM, USB-to-COM
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #280 : Декабрь 26, 2010, 14:50 »

Заглянул в свои исходники: у нас такое событие обрабатывалось извне библиотеки. В общем есть цикл в отдельном потоке, который проверяет кол-во доступных байт для чтения при помощи метода bytesWaiting. Если этот метод возвращает -1 (ошибка) мы закрываем порт и освобождаем ресурсы. Метод bytesWaiting асинхронный, реализованный при помощи WaitCommEvent и WaitForSingleObject
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #281 : Декабрь 27, 2010, 18:11 »

Потому что если открыть порт и выдернуть его - то из этой ветки устройство не исчезнет! На crossplatform.ru уже обсуждали.
Интересно, никогда не наблюдал такого. Кинь ссылку на топик.
начало тут

Если этот метод возвращает -1 (ошибка) мы закрываем порт и освобождаем ресурсы.
Моё:
Цитировать
я использую QxtSerialPort в виндовозе, для отлова отключения преобразователя USB-RS232 при открытом порте всегда проверяю кол-во принятых байт. Драйвер FTDI'ного преобразователя всегда отрицательное значение возвращает.
Записан

Юра.
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #282 : Декабрь 27, 2010, 19:29 »

Цитировать
я использую QxtSerialPort в виндовозе, для отлова отключения преобразователя USB-RS232 при открытом порте всегда проверяю кол-во принятых байт. Драйвер FTDI'ного преобразователя всегда отрицательное значение возвращает.
А если, к примеру, байты начнут передаваться только через час, два, три (к примеру, так задумано) - то и о исчезновении устройства ты узнаешь тоже через час, два, три?!
А может и вообще не узнаешь.
« Последнее редактирование: Декабрь 27, 2010, 19:35 от kuzulis » Записан

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

Сообщений: 3880


Просмотр профиля WWW
« Ответ #283 : Декабрь 27, 2010, 19:34 »

>>то и о исчезновении устройства ты узнаешь тоже через час, два, три?!
да. Но на практике это и нестрашно.
Записан

Юра.
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #284 : Январь 08, 2011, 15:11 »

Доброго времени.
Цитировать
Да собственно проблема в следующем. Эта ошибка возникла у нас на рабочем месте разработчика и её можно обойти, раз, другой, изменяя предлагаемые исходники (что очень сильно надоедает). Но что если, она возникнет уже на стороне клиентов, использующих наш софт. Они же в первую очередь обратятся к нам и что мы им скажем? Разведём руками. Пинайте админа!? В лучшем случае, как говорят на востоке - потеряем лицо (не такие уж мы и гордые). А если вопрос возникнет в некий критический момент, да на нас потом всех собак спустят.
Ну так, для себя один раз измените исходники, они ж опен-сурц, в чем проблема?
Как вариант - возьмите очень старые исходники библиотеки на fireforge.net , там по моему, "тупо" читался реестр, может быть, этой проблемы не будет, измените их и добавьте себе.

Цитировать
Поэтому ещё раз прошу рассмотреть использование в библиотеке альтернативных вариантов получения списка портов.
Найдите альтернативное решение сами, предъявите их общественности (ну и мне) и, может быть, их можно будет добавить в основную ветку через дефайны.
Я сам не намерен этим заниматься.
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: 1 ... 17 18 [19] 20 21 ... 88   Вверх
  Печать  
 
Перейти в:  


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