SDL_Renderer使用100%CPU和一大堆RAM来做任何事情

时间:2016-07-07 01:36:43

标签: c++ memory sdl sdl-2 render-to-texture

我正在用SDL2制作一款游戏,很快在游戏中占用了太多内存甚至关闭。我删除了代码,发现即使这个毫无意义,一个文件程序也会使用100%的CPU和一大笔RAM。

#include "SDL.h"
#include "SDL_image.h"
#include <cassert>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

SDL_Renderer* gRenderer;
SDL_Window* gWindow;

void init();
void close();

int main()
{
    init();
    SDL_Event e;
    bool quit;

    while( !quit )
    {
         while( SDL_PollEvent( &e ) != 0 )
         {
              if( e.type == SDL_QUIT )
                  quit = true;
         }
    }
    close();
}

void init()
{
    assert( SDL_Init( SDL_INIT_EVERYTHING ) >= 0 );
    gWindow = SDL_CreateWindow( "Space", SDL_WINDOWPOS_UNDEFINED,
                   SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH,
                   SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
    assert( gWindow );

    gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_ACCELERATED );
    assert( gRenderer );

    int imgFlags = IMG_INIT_PNG;
    assert( IMG_Init( imgFlags ) & imgFlags );

    SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
}

void close()
{
    SDL_DestroyRenderer( gRenderer );
    SDL_DestroyWindow( gWindow );

    IMG_Quit();
    SDL_Quit();
}

3 个答案:

答案 0 :(得分:2)

正如Ivan已经提到的,你应该尝试限制程序的FPS。 一种方法是使用SDL_GetTicks来衡量持续时间,然后使用SDL_Delay(如果足够快)。这样,现代计算机大部分时间都会睡眠,而坏计算机仍会获得良好的帧速率:

while(running) {
  auto time = SDL_GetTicks();
  // Rendering and event handling
  if ((SDL_GetTicks() - time) < 10) {
    SDL_Delay(10);
  }
}

您应该使用数字(示例中的10和10)稍微玩一下,以查看您的程序需要多少FPS。

答案 1 :(得分:1)

您正在尽快运行以进行编程,因此它会使用它可以获得的所有资源。

尝试限制FPS。

答案 2 :(得分:0)

使用assert可以使用很多RAM,也许你应该考虑不使用它们。尝试一下简单的if来测试你的初始化。

编辑:似乎RAM问题并非来自此问题。抱歉,答案不错