6

我正在设计应该在图像上展示开放简历的程序。我注意到基本 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 回答