Zu hohe Prozessorlast bei SDL-Programm

Ich hab das jetzt mal getestet...das Programm hängt sich nach einigen Sekunden auf! Ich weiß jetzt nicht woran das liegen könnte! :(

greetz
daddz
 
Ich weiß es nicht...auf jedenfall hängt es sich erst auf wenn ich ein anderes Fenster über das Programm ziehe (z.B. der Task-Manager)
Hier is der "neue" Code:
Code:
#include <stdlib.h>
#include <SDL/SDL.h>

int main(int argc, char *argv[])
{
    SDL_Surface *screen, *image;
	SDL_Rect dst, dstblue;
    SDL_Event event;
	Uint8 *keys;
	int tuxX = 50, tuxY = 50;
    bool done = false;
    if(SDL_Init(SDL_INIT_VIDEO) == -1)
    {
        printf("Can't init SDL:  %s\n", SDL_GetError());
        exit(1);
    }
    atexit(SDL_Quit); 
    screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 255));
    if(screen == NULL)
    {
        printf("Can't set video mode: %s\n", SDL_GetError());
        exit(1);
    }
    image = SDL_LoadBMP("tux.bmp");
    if(image == NULL)
    {
        printf("Can't load image of tux: %s\n", SDL_GetError());
        exit(1);
    }	
	dst.w = image->w;
	dst.h = image->h;
	dstblue.w = image->w + 1;
	dstblue.h = image->h + 1;
    SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(image->format, 255, 0, 255));    
    while(!done)
    {
        unsigned int startTime;
        startTime = SDL_GetTicks();
        
        while(SDL_PollEvent(&event))
        {
            switch(event.type)
            {
                case SDL_QUIT:
                done = true;
                break;
            }
        }
		keys = SDL_GetKeyState(NULL);
		if(keys[SDLK_UP])
		{
			if(tuxY > 10)
				tuxY--;
		}
		if(keys[SDLK_DOWN])
		{
			if(tuxY < 470 - image->h)
				tuxY++;
		}
		if(keys[SDLK_RIGHT])
		{
			if(tuxX < 630 - image->w)
				tuxX++;
		}
		if(keys[SDLK_LEFT])
		{
			if(tuxX > 10)
				tuxX--;
		}
		dst.x = tuxX;
		dst.y = tuxY;
		dstblue.x = tuxX - 1;
		dstblue.y = tuxY - 1;
		SDL_FillRect(screen, &dstblue, SDL_MapRGB(screen->format, 0, 0, 255));
		SDL_BlitSurface(image, NULL, screen, &dst);
		SDL_Flip(screen);
    	// am Ende Zeit nehmen
        unsigned int endTime;
        endTime = SDL_GetTicks();
    
         // Differenz berechnen (tatsächliche Dauer der Schleife
        unsigned int diffTime = endTime-startTime;
        
         // 50 FPS abwarten (20 Millisekunden)
        SDL_Delay(20-diffTime);
    }
    SDL_FreeSurface(image);
    return 0;
}

greetz
daddz
 
Du musst uns schon sagen was genau passiert? Aufhängen alleine ist nicht genug!
Was passiert? Absturz, Endlosschleife, ...?
Und wo genau passiert das? Verwende bitte einen Debugger.

Daniel
 
Ich habe keine Ahnung wie man einen Debugger verwendet! Weiß nicht mal ob ich überhaupt einen habe! Es passiert halt erst sobald man das Fenster wieder aktiviert! Vielleicht kann jemand anders den Code mal ausprobieren und Debuggen! (kann auch die verwendete tux.bmp) schicken wenn es notwendig ist!

greetz
daddz
 
Das mit dem Debugger leg ich dir stark ans Herz.
Wie willst du vernünftig programmieren ohne dein Programm zu debuggen?
Wichtig wäre mal auf welcher Plattform du entwickelst, da ja SDL nicht nur auf Windows läuft und welche Tools du verwendest.

Häng mal alles was benötigt wird an. Dann kann man mal schauen was passiert.
 
Okay...dann werd ich mich mit dem Thema Debugger mal genauer befassen! Kennt ihr einen guten?
Naja also hier die gewünschten Daten:
OS: WinXP
Compiler: Dev-C++
Das Bild zum compilieren:Klick!

Danke schonmal!

greetz
daddz
 
Zurück