|
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
|
|||||||||||||||||||
COM порт, GTK+, потоки07.12.2017, 08:29. Показов 1761. Ответов 4
Метки нет (Все метки)
Всех приветствую! Нужна Ваша помощь! Суть вопроса:
Есть прога работающая с исп. GTK считывающая данные с COM порта. Работала без вопросов, если данные сыпятся с порта непрерывно. При подключении устр-ва посылающего данные с задержкой 10 сек. Прога стала подвисать. Понятно, что нужно считывание перенести в отдельный поток. И тут началось.... У меня уже голова кругом... Сначала пытался сделать потоки из библиотеки GTK. У меня не получилось с ними разобраться. Либо не работали, либо работали необъяснимым образом. В нете узнал, что использовать потоки GTK можно с особой осторожностью, а работа потоков в Windows вообще не гарантируется. В общем создал поток с помощью WINAPI. При нажатии на кнопку СТАРТ начинался крутиться цикл в отдельном потоке и там же была команда GTK set_text, которая отображает данные с порта. Проблема, что прога работает ~1 мин. потом падает. В нете написано, что использовать GTK GUI фишки в отдельном потоке низя. Ну или можно, только как-то хитро. Я ничего не понял. Ок, в отдельном потоке данные считываются и записываются в массив. А отображение массива данных сделать в основном потоке. А как мне его отображать в отдельном потоке, если у меня прога зациклина в этом потоке по условию (пока не нажата кнопка СТОП) ??? Цикл получения данных с порта пока не нажата кнопка СТОП:
Добавлено через 23 минуты Когда прога падает, выдается ошибка :
Добавлено через 36 минут В доках на GTK сказано, что нужно добавлять:
0
|
|||||||||||||||||||
| 07.12.2017, 08:29 | |
|
Ответы с готовыми решениями:
4
COM порт, потоки, и таймер. Считывание данных COM порт и потоки Что привычнее для Windows-программиста-GTK+, GTK#, wxWidgets, Qt, Java FX, Swing? |
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,921
|
|
| 07.12.2017, 09:18 | |
|
Я бы предложил решать с другой стороны: использовать неблокирующую функцию чтения из COM-порта. Если данные есть она должна вернуть их и их количество, если нет - сообщить об ошибке.
0
|
|
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,921
|
|
| 07.12.2017, 09:24 | |
|
Как-то так
0
|
|
|
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
|
|||
| 07.12.2017, 10:50 [ТС] | |||
|
Да, да. считывать с порта в цикле была плохая идея. Знал же, что влечу.
Я решил проблему частично. Т.е. я добавил :
Уже 3 раза прогнал. Вроде, работает, не падает !!! Сейчас проблема с записью в файл из потока (стр. 14 см выше) Не записывается. Пробовал вытащить fout из потока, все равно файл пустой ( Почему ??? Добавлено через 58 минут C созданием WINAPI выявились 3 проблемы: 1) данные перестали записываться в файл 2) если нажать на кнопку останов, потом старт - на экран выводятся нули вроде : 0000000000000000data 3) кнопка старт стоп работает, но если , например, попытаться сдвинуть программу мышкой - прога зависает и падает (((
0
|
|||
|
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
|
|||||||||||
| 15.12.2017, 01:01 [ТС] | |||||||||||
|
Очередная попытка. Итак...
Создал поток и вывел туда чтение порта
- запись в файл идет не по мере поступления данный с порта, а в бесконечном цикле - на кнопку старт\стоп можно нажать только 1 раз. Последующее нажатие приводит к крушению проги. Подскажите, как поправить!!!
0
|
|||||||||||
| 15.12.2017, 01:01 | |
|
Помогаю со студенческими работами здесь
5
Распараллелить потоки при чтении и записи в serial порт
При компиляции g++ выдаёт "gtk/gtk.h: No such file or directory" Открыть порт 4444 в брэндмауэре. Антивируса нет. провайдером порт открыт
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|