2013-02-02 7 views
6

私は、画像に開いたCVを示すプログラムを設計しています。私は基本的なSDLアプリケーションの非常に悪い概念に気付きました。それはループと遅延で構成されています。SDLプログラムが余分なリソースを消費しないようにします。

while(true) { 
    while(event_is_in_buffer(event)) { 
     process_event(event); 
    } 
    do_some_other_stuff(); 
    do_some_delay(100);  //Program is stuck here, unable to respond to user input 
} 

これは、プログラムが実行され、それが背景にある場合でも、レンダリングます(または再レンダリングは、最初の場所で必要でない場合)。より長い遅延を使用すると、リソースの消費量は少なくなりますが、マウスクリックなどのイベントが処理されるまでには長い時間待たなければなりません。
私が望むのは、WinApiがソケット要求と同じようにイベントを待つプログラムを作ることです。 これは可能ですか?私が欲しい
コンセプト:

bool go=true; 
while(get_event(event)&&go) { //Program gets stuck here if no events happen 
    switch(event.type){ 
     case QUIT: go=false; 
    } 
} 

答えて

8

あなたはSDLでイベントを待つSDL_WaitEvent(SDL_Event *event)を使用することができます。現在使用しているポーリングループの設計よりも少ないリソースを使用します。この例の例を参照してくださいdoc

{ 
    SDL_Event event; 

    while (SDL_WaitEvent(&event)) { 
     switch (event.type) { 
       ... 
       ... 
     } 
    } 
} 
+0

ありがとう、これは私が必要なものです。待っている時間制限を設定するトリックはありますか(ソケットのようなもの)? –

+1

SDL_WaitEventTimeout(SDL_Event *イベント、intタイムアウト)を使用する必要があります。 http://wiki.libsdl.org/moin.cgi/SDL_WaitEventTimeout –

関連する問題