簡體   English   中英

簡單程序的高CPU使用率

[英]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::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文檔

如果設置了限制,則在每次調用display()后窗口將使用一個小延遲,以確保當前幀持續足夠長的時間以匹配幀速率限制。

問題是

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

是一個沒有停頓的循環。 由於像這樣的循環通常會消耗100%的CPU,我不得不猜測你有一個4核CPU,所以它消耗了一整個核心,這是CPU容量的25%。

您可以在循環中添加暫停,這樣它就不會100%運行,也可以一起更改事件處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM