6

画像上でオープン CV を示すプログラムを設計しています。基本的な 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;
    }
}
4

1 に答える 1

8

SDL_WaitEvent(SDL_Event *event)SDL でイベントを待機するために使用できます。現在使用しているポーリング ループ設計よりも少ないリソースを使用します。このドキュメントの例を参照してください:

{
    SDL_Event event;

    while ( SDL_WaitEvent(&event) ) {
        switch (event.type) {
                ...
                ...
        }
    }
}
于 2013-02-02T21:48:04.890 に答える