Виснет программа, слушающая COM порт25.12.2012, 10:53. Показов 5218. Ответов 23
Метки нет (Все метки)
Всем доброго дня!
Помогите с проблемой пожалуйста. Есть сканеры штрих-кодов Symbol LS2208, работают в режиме эмуляции COM порта. Написал класс, который слушает список COM портов и при получении строки генерирует событие:
Буду рад услышать любые предположения.
0
|
||||||
| 25.12.2012, 10:53 | |
|
Ответы с готовыми решениями:
23
Виснет программа при компиляции, степовер не работает, так же виснет
Виснет программа... |
| 25.12.2012, 11:09 [ТС] | ||||||
|
Тоже так думал, но у меня две разных программы (одну из которых я даже успел переписать чуть ли не полностью), общее только использование сканеров. И обе виснут
Еще обе используют хук на клавиатуру этим классом, но хук работает и в других местах с WinForms:
0
|
||||||
|
|
|
| 25.12.2012, 11:25 | |
|
Хук тоже работает в отдельном потоке? Если нет, надо вынести.
Сложно так сказать издалека о причине повисаний, но это иногда случается при исчерпании ресурсов (например, создается много-много объектов IDisposable, для которых не вызывается Dispose() после использования). Попробуйте сперва локализовать место, где происходит повисание, путем ведения лога или как-то еще. Я все жу думаю, что дело не в процессе ком-порта.
1
|
|
| 25.12.2012, 11:38 [ТС] | |
|
Хук встраивается в цепочку обработчиков, как я понимаю, и уже оттуда генерирует событие (кстати его и правда неплохо бы в отдельном потоке генерировать, чтоб система обработку нажатия продолжила)
А насчет логов - пробовал конечно, непредсказуемо все. Виснет просто в процессе ожидания. Вкратце назначение одной из программ - на складе стоит ПК с сенсорным монитором, на нем висят сканеры. Периодически к этому ПК подходят работники, сканируют штрих-коды документов и вводят данные по этим документам. Так вот жалуются, что бывает подходят к ПК, а он висит. Т.е. виснет не в результате чьих-то действий, а в процессе ожидания сканирования. Когда зависает - количество потоков у процесса и количество памяти не большое, т.е. это не утечки где-то. Может есть какая-то специфика работы с эмулированными COM портами, вы не сталкивались?
0
|
|
|
|
|
| 25.12.2012, 12:34 | |
|
Возможно, дело в хуках. Вынести их стоит в любом случае.
С портами дела не имел, но все равно дочерний поток не должен вешать основной. У меня была такая проблема: программа через некоторое время переставала выполнять определенные действия (отправку запросов на удаленный сервер), долго не мог понять в чем дело, пока не заметил, что не завершал (Dispose) объекта-запроса. Т.е. каждый раз (раз в секунду) у меня создавался IDisposable объект, для которого не вызывался Dispose. В итоге расходов памяти не было, но через какое-то время программа переставала работать (оне не висла, не вылетала, но нужных действий не выполняла). Возможно, у вас аналогичный случай. Наверное дело в обработчике события OnBarcodeScanned, можете привести его код?
1
|
|
| 25.12.2012, 13:00 [ТС] | |||||||||||||||||
Насчет IDisposable - у меня такой код есть, может из-за него быть, как вы считаете? Этот код просто делает движения на экране ожидания, добавляет тексту "Отсканируйте документ" точки в начале и в конце, т.е. получается что-то вроде Отсканируйте документ .Отсканируйте документ. ..Отсканируйте документ.. ...Отсканируйте документ... Отсканируйте документ .Отсканируйте документ. ..Отсканируйте документ.. ...Отсканируйте документ...
Попробую убрать.Добавлено через 13 минут Изменил на
0
|
|||||||||||||||||
|
|
|||||||||||
| 25.12.2012, 13:05 | |||||||||||
|
Я думаю, дело в MyReader и _PackForm. Оба этих объекта требуют уничтожения после использования, особенно MyReader.
Например:
1
|
|||||||||||
| 25.12.2012, 14:07 [ТС] | |
|
Все равно завис. Причем на моих глазах - в этот момент никаких действий не происходило. Обратил внимание, что в диспетчере задач есть столбец "Ошибок страниц", так вот он растет очень быстро, около 5000 в секунду, и на момент зависания было значение около 2 500 000. Если убрать цикл рисования точек - не растет, растет только если перерисовывается окно (те же точки или если окном диспетчера задач по моему окну поводить). Но значение этого параметра на других ПК (там где не зависло) было гораздо выше (6 млн).
Добавлено через 20 минут Изменил индикацию с точек на мигание цветом, вроде количество ошибок страницы почти перестало расти. Посмотрим..
0
|
|
| 25.12.2012, 14:28 [ТС] | |||||||||||
|
Вот он, я ранее писал о нем. На экране есть Label с текстом типа "Отсканируйте документ". Во время ожидания документа к нему слева и справа пририсовываются точки. Точнее даже приписываются - просто меняется текст Label в цикле.
0
|
|||||||||||
|
|
||||||
| 25.12.2012, 14:32 | ||||||
|
А если убрать этот код, то не растет?
Правильнее написать что-то вида
1
|
||||||
| 25.12.2012, 14:43 [ТС] | |
|
Все равно завис
Причем этот счетчик не большое значение имел, похоже, что проблема не в нем.Если убрать код, то не растет, только при перерисовке окна (например, если диспетчером задач по окошку повозить).
0
|
|
| 25.12.2012, 16:20 [ТС] | |
|
Да тут и описывать особо нечего, что интересно... Вешается основной поток формы через случайный промежуток времени. Возможно, что через некоторый интервал бездействия - это предположение, основанное на том, что те ПК, через которые проходит больше документов, виснут реже, чем те, на которых почти не идет работа. Повторить на своей машине не могу. Все действия происходят в фоновых потоках (в основном). Ощущение, как будто форма просто перестает отвечать на сообщения Windows. Сейчас попробовал выставить параметр ShowInTaskbar формы в true (раньше был false, чтоб не маячила на панели задач), понаблюдаю.
0
|
|
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
|
| 25.12.2012, 17:58 | |
|
Не до конца разобрался в вашем проекте;
я так понимаю, программа имеем всего один фоновый поток, в котором ведется прослушка, или же их несколько? Если несколько, то можно попробовать понизить приоритет потоков, поскольку если их становится много, то возможно, они вытесняют, главный поток, отсюда и подвисания. Добавлено через 2 минуты Причем это как раз может происходить в произвольные моменты времени.
1
|
|
| 25.12.2012, 18:16 [ТС] | |
|
День добрый.
В программе есть основной поток формы, куда приходят события из класса BarCodeScanner. Класс BarCodeScanner слушает набор COM портов, каждый в своем потоке. При получении строки из какого-либо порта генерируется событие, которое обрабатывается в основном потоке формы. Вся программа (все потоки) периодически виснут. Причем найти связь с каким-либо событием не удается. При этом не просто подвисает, а конкретно виснет, не реагируя на сворачивание, Alt-F4 и т.д. Добавлено через 1 минуту Т.е. надо понизить приоритеты всех потоков, кроме основного? Спасибо, сейчас попробую.
0
|
|
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
|
| 25.12.2012, 18:20 | |
|
Ну да, именно так . Если интерфейс подвисает, значит основной поток вытесняется.
1
|
|
| 26.12.2012, 11:55 [ТС] | |
|
Понизил приоритет потоков, читающих информацию со сканеров. Количество зависаний увеличилось, по крайней мере субъективно. Попробую повысить
0
|
|
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
|
| 26.12.2012, 12:33 | |
|
Странно, что-то в логике тогда
1
|
|
| 26.12.2012, 12:33 | |
|
Помогаю со студенческими работами здесь
20
Программа виснет программа виснет Виснет программа
Виснет программа Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|