2016-01-23 178 views
-1

我有一个SDL窗口,按下十字键后需要一段时间关闭。我在事件循环中发生了一些事情,所以我认为这可能与事件有关。我有一个类似的SDL窗口,可以立即关闭,但在事件循环期间它没有做任何事情,只检查十字。SDL窗口不能正常关闭

我对事件的代码循环是这样的:

while(event.type != SDL_QUIT){ 
    while(SDL_PollEvent(&event) != 0){ 
    if (event.type == SDL_QUIT){ 
     SDL_Quit(); 
     exit(1); 
    } 
    flashingText(data, fontdata, display, text); 
    } 
    SDL_Delay(100); 
} 

flashingText功能有一定的SDL延误和SDL渲染?

+0

'exit(1)'表示由于功能错误导致程序错误,程序关闭。当程序关闭时,你应该把'exit(0)'放在上面,因为用户按十字,因为这意味着没有任何错误。 [Here](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v = vs.85).aspx)是你应该在exit中使用什么参数的完整列表( )在哪种情况下的功能。 –

回答

0

延迟是因为flashingText()被称为为事件调查,并在窗口内更鼠标移动,更多的事件被解雇循环和轮询。考虑这个代码(它使用上面的事件轮询);

#include <SDL2/SDL.h> 
#include <iostream> 

int main() 
{  
     SDL_Window* window; 
     SDL_Renderer* renderer; 

     // Initialize SDL. 
     if (SDL_Init(SDL_INIT_VIDEO) < 0) 
       return 1; 

     window = SDL_CreateWindow("SDL_RenderClear", 
         SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 
         512, 512, 
         0); 

     renderer = SDL_CreateRenderer(window, -1, 0); 
     SDL_SetRenderDrawColor(renderer, 255, 128, 128, 255); 
     SDL_RenderClear(renderer); 

    // OP's code starts 
    SDL_Event event; 
    while(event.type != SDL_QUIT){ 
    while(SDL_PollEvent(&event)){ 
     if (event.type == SDL_QUIT){ 
      SDL_Quit(); 
      exit(1); 
     } 
      SDL_RenderPresent(renderer); 
      // to simulate OP's flashingText() 
      SDL_Delay(50);    
    } 
    SDL_Delay(100); 
    } 
    // OP's code ends 

    return 0; 
} 

您会发现窗口区域内的鼠标滚动/移动越多,程序退出的延迟就越多。

希望有所帮助。

干杯。