Jeśli pracowałeś z zestawami narzędzi GUI, wiesz, że istnieje pętla zdarzeń/pętla główna, która powinna zostać wykonana po wykonaniu wszystkich czynności, dzięki czemu aplikacja będzie nadal działać i reagować na różne zdarzenia. Na przykład, dla Qt, byś to zrobić w main():W jaki sposób zaimplementujesz podstawową pętlę zdarzeń?
int main() {
QApplication app(argc, argv);
// init code
return app.exec();
}
który w tym przypadku, app.exec() jest główną pętlę aplikacji.
Oczywistym sposobem wdrożenia tego rodzaju pętli byłoby:
void exec() {
while (1) {
process_events(); // create a thread for each new event (possibly?)
}
}
Ale to czapki procesora do 100% i jest practicaly bezużyteczne. Jak mogę zaimplementować taką pętlę zdarzeń, która jest responsywna bez całkowitego zjedzenia procesora?
Odpowiedzi są doceniane w języku Python i/lub C++. Dzięki.
Przypis: W celu zdobycia wiedzy, zaimplementuję własne sygnały/gniazda, a ja użyłbym ich do wygenerowania zdarzeń niestandardowych (np. go_forward_event(steps)
). Ale jeśli wiesz, jak ręcznie korzystać z zdarzeń systemowych, chciałbym o tym wiedzieć.
wierzę, można zagłębić się w kodzie źródłowym Qt i zobaczyć dokładnie to, co robią w exec(). To prawdopodobnie dałoby ci kilka dobrych wskazówek. – JimDaniel