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