//初始化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事件 //初始化SDL2
if (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 dll
2.链接器->输入->附加依赖项 SDL2.lib SDL2main.lib
3.链接器->系统->子系统 窗口 (/SUBSYSTEM:WINDOWS) 控制台 (/SUBSYSTEM:CONSOLE)
4.C++->代码生成->运行库 /MD
编译
cl /MD /c c.cpp
链接
link /SUBSYSTEM:CONSOLE c.obj SDL2.lib SDL2main.lib
*/

SDL多线程显示更新窗口的更多相关文章

  1. WPF多线程UI更新——两种方法

    WPF多线程UI更新——两种方法 前言 在WPF中,在使用多线程在后台进行计算限制的异步操作的时候,如果在后台线程中对UI进行了修改,则会出现一个错误:(调用线程无法访问此对象,因为另一个线程拥有该对 ...

  2. MFC关于多线程中传递窗口类指针时ASSERT_VALID出错的另类解决 转

    MFC关于多线程中传递窗口类指针时ASSERT_VALID出错的另类解决   在多线程设计中,许多人为了省事,会将对话框类或其它类的指针传给工作线程,而在工作线程中调用该类的成员函数或成员变量等等. ...

  3. 深度剖析OpenGL ES中的多线程和多窗口渲染技术

    由 创新网小编 于 星期五, 2014-04-11 14:56 发表 移动设备中的CPU和GPU已经变得很强大,到处都是配备一个或多个高分辨率屏幕的设备,需要使用带有图形驱动器的复杂交互也日益增加.在 ...

  4. WPF多线程UI更新

    前言 在WPF中,在使用多线程在后台进行计算限制的异步操作的时候,如果在后台线程中对UI进行了修改,则会出现一个错误:(调用线程无法访问此对象,因为另一个线程拥有该对象.)这是很常见的一个错误,一不小 ...

  5. 关于Windows更新窗口内容的问题(作为一个实验,效果很明显)

    Windows中的窗口在特定情况下会由系统进行重绘,如无效区域重新显现时,,会向窗口的处理过程发送VM_PAINT消息,但是,可能还有Windows自己的更新窗口处理,如在下面的代码中,将击键显式地转 ...

  6. linux如何隐藏和显示所有窗口?

    centos7 基本上就跟fedora23是一样的了, 也许它们使用的内和是一样的, fedora23使用的是4.2.3, 所以使用fedora对使用centos和redhat是有优势和好处福利的. ...

  7. 打包bat等文件成exe,双击运行不显示dos窗口,exe不报毒

    准备材料如下bat和vbs直接新建文本,然后改后缀就可以建出来了(后面发现exe运行vbs来启动bat不报毒)下面内容就是要把这些文件打包成exe,双击exe后打开图片test.jpg,不显示dos窗 ...

  8. WPF 显示模态窗口和窗体

    <WPF编程宝典——使用C# 2008和.NET 3.5(第2版)>第25章与Windows窗体的互操作,本章将介绍用于集成Windows窗体和WPF内容的不同策略.还将分析如何在应用程序 ...

  9. Android 4.4 Kitkat Phone工作流程浅析(六)__InCallActivity显示更新流程

    本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. ...

随机推荐

  1. 洛谷P1189 SEARCH 题解 迭代加深

    题目链接:https://www.luogu.com.cn/problem/P1189 题目大意: 给你一个 \(n \times m\) 的矩阵,其中有一些格子可以走,一些各自不能走,然后有一个点是 ...

  2. 洛谷P1720 月落乌啼算钱 题解 斐波那契数列/特征方程求解

    题目链接:https://www.luogu.com.cn/problem/P1720 题目描述: 给你一个公式 ,求对应的 \(F_n\) . 解题思路: 首先不难想象这是一个斐波那契数列,我们可以 ...

  3. 简单了解linux内核

    linux内核是单块结构Linux能动态的按需装载或卸载模块Linux内核线程以一种十分受限制的方式来周期性地执行几个内核函数,因为linux内核线程不能执行用户程序,因此,她们并不代表基本的可执行上 ...

  4. Kubernetes 会不会“杀死” DevOps?

    作者丨孙健波(天元)  阿里巴巴技术专家 导读:DevOps 这个概念最早是在 2007 年提出的,那时云计算基础设施的概念也才刚刚提出没多久,而随着互联网的逐渐普及,应用软件的需求爆发式增长,软件开 ...

  5. vue项目使用v-charts的柱形图的各种样式和数据配置

    找了很多网上关于v-charts的柱形图使用,我发现我一模一样的配置就是没有效果,我原来是按需引入的, import VeHistogram from 'v-charts/lib/histogram' ...

  6. 【转】出现“ValueError : numpy.ufunc has the wrong size, try recompiling" 解决方法

    出现这个问题的原因是:numpy版本和scikit-learn版本不搭配. 解决方法: 升级numpy即可: pip install -U numpy

  7. beetlex网关之聚合和url请求过虑

    在这里主要介绍beetlex应用网关的两个插件,分别是聚合和url请求过虑.通过聚合插件可以把整合多个请求的数据来应答请求端,而Url请求过虑同可以拒绝一些有非常关键字的请求. 请求聚合 在网关服务中 ...

  8. input 只允许输入小数

    oninput = "value=value.replace(/[^\d]/g,'')" 输入浮点数不好使 突发奇想自己写一个与众不同的... oninput="valu ...

  9. Thinkpad S440 I/O接口配置

    HDMI 视频接口 SS USB3.0接口 电源接口 音频接口 网络接口 没有com口可以用USB口,然后安装一个USB转com口的驱动.

  10. poi解析excel(含有公式)

    /** * Jun 25, 2012 */ import java.io.File; import java.io.FileInputStream; import java.io.IOExceptio ...