以下代码用于空窗口,但在我的Intel i3上显示相对较高的CPU使用率25%。我也尝试了setFramerateLimit
而没有任何变化。有没有办法减少CPU使用率?
#include<SFML/Window.hpp>
void processEvents(sf::Window& window);
int main()
{
sf::Window window(sf::VideoMode(800, 600), "My Window", sf::Style::Close);
window.setVerticalSyncEnabled(true);
while (window.isOpen())
{
processEvents(window);
}
return 0;
}
void processEvents(sf::Window& window)
{
sf::Event event;
window.pollEvent(event);
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;
}
}
答案 0 :(得分:7)
由于您未在循环中调用window.display()
,因此请注意在适当的时间内暂停该主题,并使用sf::RenderWindow::setVerticalSyncEnabled
或sf::RenderWindow::setMaxFramerateLimit
进行设置
试试这个:
while (window.isOpen())
{
processEvents(window);
// this makes the thread sleep
// (for ~16.7ms minus the time already spent since
// the previous window.display() if synced with 60FPS)
window.display();
}
来自SFML Docs:
如果设置了限制,则在每次调用
display()
后窗口将使用一小段延迟,以确保当前帧持续足够长的时间以匹配帧速率限制。
答案 1 :(得分:3)
问题是
while (window.isOpen())
{
processEvents(window);
}
是一个没有暂停的循环。由于像这样的循环通常会消耗100%的CPU,我不得不猜测你有一个4核的CPU,所以它占用了整个核心,这是CPU容量的25%。
您可以在循环中添加一个暂停,这样它就不会100%一直运行,或者您可以一起更改事件处理。