Проблема программирования с непрерывным циклом и кнопками? - PullRequest
0 голосов
/ 26 февраля 2011

Мне нужно разработать программу, которая использует основной цикл, чтобы отслеживать время и выполнять непрерывные проверки.Также у меня есть система графического интерфейса, которая может изменить вещи в системе.Вопрос в следующем:

Если я запускаю непрерывный цикл, который не останавливается до тех пор, пока система не выйдет, сможет ли пользователь взаимодействовать с настроенным мной графическим интерфейсом, или цикл должен прекратиться для получения эффектанажатия кнопки, чтобы иметь место?Другими словами, нужно ли приостанавливать цикл, запускать команду кнопки, а затем перезапускать цикл каждый раз, когда пользователь взаимодействует с GUI?и если так, есть ли способ обойти это?Спасибо всем, кто ответит

Ответы [ 2 ]

2 голосов
/ 26 февраля 2011

Поскольку вы не указали свою платформу, я буду называть мой ответ общим.

Существует два шаблона, которые вы можете использовать: опрос или прерывание / управление событиями.

опрос

Опрос включает в себя частую проверку семафора или флажка, чтобы увидеть, произошло ли что-то. Это распространено во встроенных системах. Фон зацикливается, пока прерывание не установит флаг, а затем обработает событие.

Прерывание / Событие управляемое.

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

На настольных платформах (Mac, Linux, Windows и т. Д.) Ваша ситуация решается с помощью нескольких потоков (выполнения). Обычно операция с графическим интерфейсом выполняется в одном потоке, а основная обработка - в другом. Это позволяет программе не замораживать графический интерфейс при нажатии кнопки.

В моем приложении графический интерфейс пользователя устанавливает событие, когда пользователь нажимает кнопку. Поток обработки ожидает (спит, ожидает) события. Пользователь нажимает кнопку, событие установлено. Поток обработки просыпается и продолжается.

1 голос
/ 26 февраля 2011

Кажется, что вы пытаетесь делать DOS-подобное программирование в Windows, которое работает наоборот.Вы должны прочитать кое-что о программировании, управляемом событиями.В вашем приложении не должно быть основного цикла.Все взаимодействия должны осуществляться через события.Когда пользователь нажимает кнопку - происходит событие.Вместо описываемого вами цикла вы должны создать таймер, который будет выполнять метод, который будет выполнять необходимые проверки.

Надеюсь, это немного помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...