Официальный форум СВД Встраиваемые Системы
28 Март, 2024, 15:24:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Работа с окнами в QNX  (Прочитано 2056 раз)
Владимир696
Пользователь

Сообщений: 20


« : 30 Сентябрь, 2016, 10:24:43 »

Добрый день!

Подскажите, друзья, при построении окна в фотоне я привязываю событие к нажатию кнопки (действие "Arm" во вкладке Callbacks). По нажатию на кнопку у меня осуществляется один цикл опроса регистров и вывод информации на экран моего приложения после завершения опроса. Если я делаю несколько циклов опроса регистров, который запускается нажатием на кнопку, то в моём окне не отображается информация о чтении регистров, пока не закончатся все циклы опроса. Только после этого на экране отображаются последние прочитанные значения из регистра. Как можно сделать, чтобы информация после каждого цикла опроса регистров отображалась в моём окне?

Заранее благодарю

С уважением, Владимир Потапченко
Записан
Игорь Косик
Пользователь

Сообщений: 11


WWW
« Ответ #1 : 30 Сентябрь, 2016, 11:59:16 »

Добрый день.

Добиться принудительной немедленной перерисовки виджетов можно с помощью функции PtFlush().
Возможно, Вам так же придется вызвать PtDamageWidget() для каждого виджета, которого Вы хотите обновить, перед использованием PtFlush().
« Последнее редактирование: 30 Сентябрь, 2016, 12:00:51 от Игорь Косик » Записан

Сотрудник СВД Встраиваемые Системы
Владимир696
Пользователь

Сообщений: 20


« Ответ #2 : 03 Октябрь, 2016, 10:31:00 »

Благодарю, Игорь!
Виджеты перерисовываются теперь. Но есть ещё одна проблема. После нажатия кнопки - у меня запускается цикл анализа регистров и отображения результатов на экране, но пока не выполнится цикл - другие кнопки управления и другие виджеты остаются не доступными для управления во время работы цикла. Как можно сделать их доступными?
Записан
Игорь Косик
Пользователь

Сообщений: 11


WWW
« Ответ #3 : 03 Октябрь, 2016, 11:26:54 »

Сделать интерфейс полноценно доступным во время выполнения задачи можно только вынеся эту задачу в отдельный поток.  Smiley

В качестве компромиссного варианта, Вы можете вставить в Ваш цикл вызовы функции PtBkgdHandlerProcess() - она вызовет обработчики для всех событий ожидающих обработки. К слову, она так же должна выполнить перерисовку всех нуждающихся виджетов как и PtFlush().
Записан

Сотрудник СВД Встраиваемые Системы
Владимир696
Пользователь

Сообщений: 20


« Ответ #4 : 03 Октябрь, 2016, 14:15:32 »

Класс! Благодарю, Игорь! Всё работает.
И ещё один вопрос. Для остановки всех работающих процессов и выхода из цикла чтения-отображения, какую лучше функцию использовать?
Записан
Игорь Косик
Пользователь

Сообщений: 11


WWW
« Ответ #5 : 04 Октябрь, 2016, 11:08:27 »

Я Вас не совсем понял, что именно вы хотите сделать? Выйти из приложения, или прервать выполнение процедуры по нажатии кнопки "Отмена"? Опишите, пожалуйста, подробнее.  Smiley
Записан

Сотрудник СВД Встраиваемые Системы
Владимир696
Пользователь

Сообщений: 20


« Ответ #6 : 04 Октябрь, 2016, 13:48:32 »

Я хочу прекратить все процедуры по нажатию на кнопку "Прекратить чтение", но при этом, чтобы окно приложения не закрывалось.
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда

Сообщений: 1075



WWW
« Ответ #7 : 04 Октябрь, 2016, 15:50:02 »

Я хочу прекратить все процедуры по нажатию на кнопку "Прекратить чтение", но при этом, чтобы окно приложения не закрывалось.

Если я правильно понял чего Вы пытаетесь достичь, то механизм прерывания собственного кода можете предусмотреть только Вы.
Записан

Владимир696
Пользователь

Сообщений: 20


« Ответ #8 : 04 Октябрь, 2016, 16:19:12 »

Да. abort() к примеру не подойдёт, т.к. вместе с процедурой закрывается и само окно. Как можно ещё прекратить выполнение процедуры по нажатию на кнопку, при этом чтобы окно не закрывалось?
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда

Сообщений: 1075



WWW
« Ответ #9 : 04 Октябрь, 2016, 17:03:20 »

В случае единственного потока достаточно тривиальных вариантов. Например, установка глобального флага по нажатию кнопки и его анализ в цикле.
Записан

Владимир696
Пользователь

Сообщений: 20


« Ответ #10 : 04 Октябрь, 2016, 17:24:09 »

Ок. Спасибо, Друзья! Ваши советы полезные. Благодарю!
Записан
Владимир696
Пользователь

Сообщений: 20


« Ответ #11 : 14 Октябрь, 2016, 09:12:08 »

Друзья, использую сейчас виджет PtProgress и хочу заполнить его своим значением. Пока не получается. Подскажите, как это сделать грамотно. Буду очень признателен!
Записан
Владимир696
Пользователь

Сообщений: 20


« Ответ #12 : 14 Октябрь, 2016, 11:45:35 »

Может есть пример какой посмотреть. Будет вообще супер!
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда

Сообщений: 1075



WWW
« Ответ #13 : 14 Октябрь, 2016, 13:02:07 »

Самое простое и быстрое это обратиться к справке.
Записан

Владимир696
Пользователь

Сообщений: 20


« Ответ #14 : 17 Октябрь, 2016, 17:18:24 »

Это я уже всё облазил
http://www.qnx.com/developers/docs/6.4.1/photon/widget_ref/ptprogress.html#Pt_ARG_PROGRESS_SPACING
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2020 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 06 Март, 2024, 05:58:59