Если вы работали с инструментами gui, вы знаете, что существует цикл событий/основной цикл, который должен выполняться после того, как все будет готово, и это будет поддерживать приложение и реагировать на различные события. Например, для Qt, вы могли бы сделать это в основном():Как бы вы реализовали базовый цикл событий?
int main() {
QApplication app(argc, argv);
// init code
return app.exec();
}
Что в этом случае app.exec() является основным-циклом приложения.
Очевидный способ реализации такого рода цикла будет:
void exec() {
while (1) {
process_events(); // create a thread for each new event (possibly?)
}
}
Но шапки процессора до 100% и practicaly бесполезно. Теперь, как я могу реализовать такой цикл событий, который реагирует, не потребляя процессор вообще?
Ответы приветствуются в Python и/или C++. Благодарю.
Сноска: Для обучения я реализую свои собственные сигналы/слоты, и я буду использовать их для создания пользовательских событий (например, go_forward_event(steps)
). Но если вы знаете, как я могу использовать системные события вручную, я хотел бы узнать об этом.
Я полагаю, вы можете углубиться в исходный код Qt и увидеть именно то, что они делают в Exec(). Это, вероятно, даст вам несколько хороших указателей. – JimDaniel