2016-01-23 2 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?

+0

'exit (1)' означает, что программа закрывается из-за ошибки из-за неправильной функции. Вы должны поместить 'exit (0)', когда программа закрывается, потому что пользователь нажимает крест, потому что это означает, что нет никакой ошибки. [Здесь] (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; 
} 

Вы найдете, что чем больше свитки мыши/перемещается в пределах области окна, тем больше задержка в программе, чтобы выйти.

Надеюсь, что это поможет.

Cheers.

Смежные вопросы