Владимир696
Пользователь
Сообщений: 20
|
|
« : 30 Сентябрь, 2016, 10:24:43 » |
|
Добрый день!
Подскажите, друзья, при построении окна в фотоне я привязываю событие к нажатию кнопки (действие "Arm" во вкладке Callbacks). По нажатию на кнопку у меня осуществляется один цикл опроса регистров и вывод информации на экран моего приложения после завершения опроса. Если я делаю несколько циклов опроса регистров, который запускается нажатием на кнопку, то в моём окне не отображается информация о чтении регистров, пока не закончатся все циклы опроса. Только после этого на экране отображаются последние прочитанные значения из регистра. Как можно сделать, чтобы информация после каждого цикла опроса регистров отображалась в моём окне?
Заранее благодарю
С уважением, Владимир Потапченко
|
|
|
Записан
|
|
|
|
Игорь Косик
Пользователь
Сообщений: 11
|
|
« Ответ #1 : 30 Сентябрь, 2016, 11:59:16 » |
|
Добрый день.
Добиться принудительной немедленной перерисовки виджетов можно с помощью функции PtFlush(). Возможно, Вам так же придется вызвать PtDamageWidget() для каждого виджета, которого Вы хотите обновить, перед использованием PtFlush().
|
|
« Последнее редактирование: 30 Сентябрь, 2016, 12:00:51 от Игорь Косик »
|
Записан
|
Сотрудник СВД Встраиваемые Системы
|
|
|
Владимир696
Пользователь
Сообщений: 20
|
|
« Ответ #2 : 03 Октябрь, 2016, 10:31:00 » |
|
Благодарю, Игорь! Виджеты перерисовываются теперь. Но есть ещё одна проблема. После нажатия кнопки - у меня запускается цикл анализа регистров и отображения результатов на экране, но пока не выполнится цикл - другие кнопки управления и другие виджеты остаются не доступными для управления во время работы цикла. Как можно сделать их доступными?
|
|
|
Записан
|
|
|
|
Игорь Косик
Пользователь
Сообщений: 11
|
|
« Ответ #3 : 03 Октябрь, 2016, 11:26:54 » |
|
Сделать интерфейс полноценно доступным во время выполнения задачи можно только вынеся эту задачу в отдельный поток. В качестве компромиссного варианта, Вы можете вставить в Ваш цикл вызовы функции PtBkgdHandlerProcess() - она вызовет обработчики для всех событий ожидающих обработки. К слову, она так же должна выполнить перерисовку всех нуждающихся виджетов как и PtFlush().
|
|
|
Записан
|
Сотрудник СВД Встраиваемые Системы
|
|
|
Владимир696
Пользователь
Сообщений: 20
|
|
« Ответ #4 : 03 Октябрь, 2016, 14:15:32 » |
|
Класс! Благодарю, Игорь! Всё работает. И ещё один вопрос. Для остановки всех работающих процессов и выхода из цикла чтения-отображения, какую лучше функцию использовать?
|
|
|
Записан
|
|
|
|
Игорь Косик
Пользователь
Сообщений: 11
|
|
« Ответ #5 : 04 Октябрь, 2016, 11:08:27 » |
|
Я Вас не совсем понял, что именно вы хотите сделать? Выйти из приложения, или прервать выполнение процедуры по нажатии кнопки "Отмена"? Опишите, пожалуйста, подробнее.
|
|
|
Записан
|
Сотрудник СВД Встраиваемые Системы
|
|
|
Владимир696
Пользователь
Сообщений: 20
|
|
« Ответ #6 : 04 Октябрь, 2016, 13:48:32 » |
|
Я хочу прекратить все процедуры по нажатию на кнопку "Прекратить чтение", но при этом, чтобы окно приложения не закрывалось.
|
|
|
Записан
|
|
|
|
Андрей Докучаев
Сотрудник СВД ВС
Легенда
Сообщений: 1075
|
|
« Ответ #7 : 04 Октябрь, 2016, 15:50:02 » |
|
Я хочу прекратить все процедуры по нажатию на кнопку "Прекратить чтение", но при этом, чтобы окно приложения не закрывалось.
Если я правильно понял чего Вы пытаетесь достичь, то механизм прерывания собственного кода можете предусмотреть только Вы.
|
|
|
Записан
|
|
|
|
Владимир696
Пользователь
Сообщений: 20
|
|
« Ответ #8 : 04 Октябрь, 2016, 16:19:12 » |
|
Да. abort() к примеру не подойдёт, т.к. вместе с процедурой закрывается и само окно. Как можно ещё прекратить выполнение процедуры по нажатию на кнопку, при этом чтобы окно не закрывалось?
|
|
|
Записан
|
|
|
|
Андрей Докучаев
Сотрудник СВД ВС
Легенда
Сообщений: 1075
|
|
« Ответ #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
|
|
« Ответ #13 : 14 Октябрь, 2016, 13:02:07 » |
|
Самое простое и быстрое это обратиться к справке.
|
|
|
Записан
|
|
|
|
Владимир696
Пользователь
Сообщений: 20
|
|
« Ответ #14 : 17 Октябрь, 2016, 17:18:24 » |
|
|
|
|
Записан
|
|
|
|
|