[SFML 3.0.2] Ograniczyć zużycie CPU
Ostatnio zmodyfikowano wczoraj o godz. 20:53
tBane Temat założony przez niniejszego użytkownika |
[SFML 3.0.2] Ograniczyć zużycie CPU » 2025-10-20 16:52:53 Cześć. Wymyśliłem jak optymalizować zużycie CPU. A mianowicie FPS limiter i sprawdzać eventy jak nie ma to continue. No i właśnie próbuję to napisać. Pobranie eventów już mam std::vector < std::optional < sf::Event >> events;
while( window->isOpen() ) { events.clear(); while( const std::optional event = window->pollEvent() ) { events.push_back( event ); } if( events.size() == 0 ) continue; teraz potrzebuję je przetworzyć w pętli obsługującej eventy. Jak to zrobić? while( const std::optional event = window->pollEvent() ) { if( event->is < sf::Event::Closed >() ) window->close(); toolbar->handleEvent( * event ); main_menu->handleEvent( * event ); };
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-20 16:57:23 Już mam ale to niestety zwiększyło zużycie CPU :-/ Zwykłe window->pollEvent jest szybsze moja nieudana optymalizacja: std::vector < std::optional < sf::Event >> events;
while( window->isOpen() ) { events.clear(); while( const std::optional event = window->pollEvent() ) { events.push_back( event ); } if( events.size() == 0 ) continue; for( auto & event: events ) { if( !event.has_value() ) continue; if( event->is < sf::Event::Closed >() ) window->close(); toolbar->handleEvent( * event ); main_menu->handleEvent( * event ); }; };
zwykłe pollEvent - bardziej wydajne: while( const std::optional event = window->pollEvent() ) { if( event->is < sf::Event::Closed >() ) window->close(); toolbar->handleEvent( * event ); main_menu->handleEvent( * event ); };
|
|
pekfos |
» 2025-10-20 19:55:28 Jak by to miało cokolwiek zmienić? |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-20 20:00:19 Jeśli brak eventów to pomija całą logikę programu czyli update, obsługę eventów i rendering. |
|
skovv |
» 2025-10-20 20:06:23 sfml nie ma jakiejś funkcji do ograniczenia liczby klatek? Coś mi się kojarzy że było coś takiego |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-20 20:09:20 nie o to mi chodzi. limiting klatek na sekundę to jedno. a ja chcę pójść o krok dalej i wyłączyć update progamu gdy nie ma eventów. |
|
skovv |
» 2025-10-20 20:12:08 tylko że zawsze są jakieś eventy :D |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-20 20:43:15 Udało się :D Zuzyćie procka 0% ! a dokładnie to 0-8%void handleEvents( std::vector < std::optional < sf::Event >> & events ) { for( auto & event: events ) { if( !event.has_value() ) continue; if( event->is < sf::Event::Closed >() ) window->close(); toolbar->handleEvent( * event ); main_menu->handleEvent( * event ); } };
render(); render(); std::vector < std::optional < sf::Event >> events;
while( window->isOpen() ) { prevTime = currentTime; currentTime = mainClock.getElapsedTime(); events.clear(); while( const std::optional event = window->pollEvent() ) { events.push_back( event ); } if( events.empty() ) { window->display(); continue; } handleEvents( events ); |
|
« 1 » 2 |