[英]High CPU usage of simple program
下面的代碼用於空窗口,但在我的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;
}
}
由於你沒有在循環中調用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文檔 :
如果設置了限制,則在每次調用
display()
后窗口將使用一個小延遲,以確保當前幀持續足夠長的時間以匹配幀速率限制。
問題是
while (window.isOpen())
{
processEvents(window);
}
是一個沒有停頓的循環。 由於像這樣的循環通常會消耗100%的CPU,我不得不猜測你有一個4核CPU,所以它消耗了一整個核心,這是CPU容量的25%。
您可以在循環中添加暫停,這樣它就不會100%運行,也可以一起更改事件處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.