我在C ++中编写了一个应该显示图片的程序(使用SDL),然后等待10秒并加载下一张图片。
当我使用Sleep(10000)
程序冻结并且没有反应时。
当我使用类似的东西时:
void Wait ( short Seconds )
{
clock_t WaitTime = clock( ) + Seconds * CLOCKS_PER_SEC;
while( clock( ) < WaitTime )
{
}
}
同样的事情发生了。是否有可能在没有窗户冻结的情况下等待10秒钟?
答案 0 :(得分:1)
使用timer并使用SDL_WaitEvents()
抽取邮件队列,直到计时器触发:
#include <SDL2/SDL.h>
#include <iostream>
void MySleep( Uint32 interval )
{
struct Container
{
static Uint32 TimerCallback( Uint32 interval, void* param )
{
SDL_Event event;
event.type = SDL_USEREVENT;
event.user.code = 42;
SDL_PushEvent( &event );
return 0;
}
};
SDL_AddTimer( interval, Container::TimerCallback, NULL );
SDL_Event event;
while( SDL_WaitEvent( &event ) )
{
if( event.type == SDL_USEREVENT && event.user.code == 42 )
break;
}
}
int main( int argc, char** argv )
{
SDL_Init( SDL_INIT_TIMER | SDL_INIT_VIDEO );
SDL_Window* window = SDL_CreateWindow
(
"SDL2",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
640, 480,
SDL_WINDOW_SHOWN
);
MySleep( 10000 );
SDL_DestroyWindow( window );
SDL_Quit();
return 0;
}
根据“无反应”的含义,您可能需要将userevent检查添加到主事件循环中。