2015-12-16 89 views
3

下面的代碼用於空白窗口,但顯示我的英特爾i3的CPU使用率相對較高,爲25%。我也嘗試了setFramerateLimit沒有變化。有沒有辦法來減少CPU使用率?簡單程序的高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; 
    } 
} 

回答

7

由於您沒有在循環中調用window.display(),因此需要暫停該線程適當的時間,使用sf::RenderWindow::setVerticalSyncEnabledsf::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()後,以確保當前幀持續了足夠長的時間以匹配幀率限制。

3

的問題是

while (window.isOpen()) 
{ 
    processEvents(window); 
} 

是一個不帶停頓的循環。由於像這樣的循環通常會佔用CPU的100%,所以我不得不猜測你有一個4核CPU,因此它佔用了CPU容量25%的整個內核。

您可以在循環中添加一個暫停,以便它不會在100%的時間內運行,或者您可以一起更改事件處理。

+1

這不是無限循環本身的問題,而是循環運行的線程在每次迭代中都沒有睡眠。 – Jack