@nslim13

Как побороть зависания программы в Lazarus?

Работаю в Lazarus IDE, использую компонент LazSerial для передачи и чтения данных по com порту. Во время работы программы происходят несистемотические зависания. Выглядит это так: нажимаю на кнопку или таймер опрашивает устройство, программа зависает на 30 секунд (висит основательно, если тыкать мышкой то появляется окошко с предложением закрыть приложение) и потом отвисае и продолжает работать дальше. При этом повторные нажатия той же кнопки или повторный опрос по таймеру такого эффекта не вызывают. Зависания могут повторяться пару раз в течение дня, могут не повторяться несколько дней. Кто-нибудь с подобным сталкивался?
  • Вопрос задан
  • 245 просмотров
Решения вопроса 1
@nslim13 Автор вопроса
В общем, проблема оказалась в применяемом компоненте для работы с COM портом - TLazSerial. В начале, когда программы были несложные и работали только в одном потоке, проблема не проявлялась. Но с нарастанием сложности проектов, с увеличением количества одновременно задействованных портов, с применением нескольких потоков зависания проявлялись всё чаще и чаще. Как я понял, у этого компонента проблемки с согласованием работы в разных потоках, и он периодически просто ловит клина. Применение критических секций так же не давало никакого эфекта.
Решением стал отказ от TLazSerial, и переход на компонент TComPort. Адаптация прошла максимально безболезненно. Так что, если у Вас проявляется подобный эффект, попробуйте такое решение.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы