SDL多线程显示更新窗口

来源:互联网 发布:网络传播类杂志 编辑:程序博客网 时间:2024/06/05 15:39
//初始化SDL2和创建一个窗口,并且将屏幕绘制成大红色#include <iostream>extern "C"{#include <SDL.h>}//Refresh Event#define REFRESH_EVENT(SDL_USEREVENT + 1)#define BREAK_EVENT(SDL_USEREVENT + 2)bool thread_exit = false;int threadFunc(void *opaque){thread_exit = false;while (!thread_exit){SDL_Event event;event.type = REFRESH_EVENT;SDL_PushEvent(&event);SDL_Delay(40);}thread_exit = true;//Break  SDL_Event event;event.type = BREAK_EVENT;//发送一个事件SDL_PushEvent(&event);return 0;}int main(int argc, char* argv[]){SDL_Window *windowScreen = NULL;//窗口SDL_Surface *windowSurface = NULL;//窗口表面SDL_Thread *refresh_thread;//SDL线程SDL_Event event;//SDL事件//初始化SDL2if (SDL_Init(SDL_INIT_VIDEO) == -1){std::cout << SDL_GetError() << std::endl;return -1;}/* 创建窗口*第一个参数是窗口的标题*第二、三个参数指明了窗口的位置信息*第四、五个参数是窗口的大小(宽、高)*第六个参数是窗口的状态*SDL_WINDOW_SHOWN--显示窗口*SDL_WINDOW_BORDERLESS--显示无边框窗口*/windowScreen = SDL_CreateWindow("title", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 240, 400, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);if (!windowScreen){std::cout << SDL_GetError() << std::endl;return -1;}//创建线程refresh_thread = SDL_CreateThread(threadFunc, NULL, NULL);if (refresh_thread == NULL){std::cout << SDL_GetError() << std::endl;return -1;}//事件(消息)循环while (true){//等待一个事件(类似于WIN32里的GetMessage)SDL_WaitEvent(&event);if (event.type == REFRESH_EVENT){/*填充窗口*第一个参数是填充的目标表面*第二个是填充的矩形区域(NULL则表示默认全部填充)*第三个参数是填充矩形用的颜色*/SDL_FillRect(windowSurface, NULL, SDL_MapRGB(windowSurface->format, 0xFF, 0x00, 0x00));//将窗口表面加载到窗口SDL_UpdateWindowSurface(windowScreen);}else if (event.type == SDL_QUIT){thread_exit = true;}else if (event.type == SDL_WINDOWEVENT){// 获取窗口的表面windowSurface = SDL_GetWindowSurface(windowScreen);if (!windowSurface){std::cout << SDL_GetError() << std::endl;return -1;}}else if (event.type == BREAK_EVENT){break;}}SDL_FreeSurface(windowSurface);SDL_DestroyWindow(windowScreen);SDL_Quit();return 0;}/*配置1.VC++目录 include lib dll2.链接器->输入->附加依赖项 SDL2.lib SDL2main.lib3.链接器->系统->子系统  窗口 (/SUBSYSTEM:WINDOWS)  控制台 (/SUBSYSTEM:CONSOLE)4.C++->代码生成->运行库 /MD编译cl /MD /c c.cpp链接link /SUBSYSTEM:CONSOLE c.obj SDL2.lib SDL2main.lib*/
0 0