SDL线程

文章目录

    • SDL线程相关

SDL线程相关

  • SDL线程创建:SDL_CreateThread
  • SDL线程等待: SDL_WaitThread
  • SDL互斥锁 :SDL_CreateMutex/SDL_DestoryMutex
  • SDL锁定互斥: SDL_LockMutex/SDL_UnlockMutex
  • SDL条件变量:SDL_CreateCond/SDL_DestoryCond
  • SDL条件变量 等待通知: SDL_CondWait/SDL_CondSingal

#include <SDL.h>
#include <stdio.h>SDL_mutex *s_lock = NULL;
SDL_cond *s_cond = NULL;int thread_work(void *arg) {SDL_LockMutex(s_lock);printf("                <============thread_work sleep\n");sleep(10); // 用来测试获取锁printf("                <============thread_work wait\n");// 释放s_lock资源,并等待signal。之所以释放s_lock是让别的线程能够获取到s_lockSDL_CondWait(s_cond, s_lock); // 另一个线程(1)发送signal和(2)释放lock后,这个函数退出printf("                <===========thread_work receive signal, continue to do ~_~!!!\n");printf("                <===========thread_work end\n");SDL_UnlockMutex(s_lock);return 0;
}#undef main
int main() {// 锁s_lock = SDL_CreateMutex();// 条件变量s_cond = SDL_CreateCond();SDL_Thread *t = SDL_CreateThread(thread_work, "thread_work", NULL);if (!t) {printf("  %s", SDL_GetError);return -1;}for (int i = 0; i < 2; i++) {sleep(2);printf("main execute =====>\n");}printf("main SDL_LockMutex(s_lock) before ====================>\n");SDL_LockMutex(s_lock); // 获取锁,但是子线程还拿着锁printf("main ready send signal====================>\n");printf("main SDL_CondSignal(s_cond) before ====================>\n");SDL_CondSignal(s_cond); // 发送信号,唤醒等待的线程printf("main SDL_CondSignal(s_cond) after ====================>\n");sleep(10);SDL_UnlockMutex(s_lock); // 释放锁,让其他线程可以拿到锁printf("main SDL_UnlockMutex(s_lock) after ====================>\n");SDL_WaitThread(t, NULL);SDL_DestroyMutex(s_lock);SDL_DestroyCond(s_cond);return 0;
}

在这里插入图片描述

这里面的信号量什么的 和 规范的那一套逻辑设计的是一样的
之前学过线程信号量相关的知识 在这里也是更换了一下函数

代码的主要逻辑是
创建子线程 子线程先拿到锁 休眠10s后 释放锁并等待信号量
主线程拿到锁 发送信号量 唤醒子线程 休眠10s后 释放锁
子线程拿到锁 输出文本并释放锁
主线程等待子线程结束后 结束流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vite与Vue Cli的区别与详解

它们的功能非常相似&#xff0c;都是提供基本项目脚手架和开发服务器的构建工具。 主要区别 Vite在开发环境下基于浏览器原生ES6 Modules提供功能支持&#xff0c;在生产环境下基于Rollup打包&#xff1b; Vue Cli不区分环境&#xff0c;都是基于Webpack。 在生产环境下&…

STM32实现串口接收不定长数据

原理 STM32实现串口接收不定长数据&#xff0c;主要靠的就是串口空闲&#xff08;idle&#xff09;中断,此中断的触发条件与接收的字节数无关&#xff0c;只有当Rx引脚无后续数据进入时&#xff08;串口空闲时&#xff09;&#xff0c;认为这时候代表一个数据包接收完成了&…

jQuery UI 使用

jQuery UI 使用 jQuery UI 是一个建立在 jQuery JavaScript 库之上的用户界面交互、特效、小部件和主题的库。它提供了一系列的交互组件,如拖动、排序、选择等,以及小部件,如自动完成、日期选择器、滑块等。此外,jQuery UI 还提供了一套主题,使得开发者可以轻松地定制应用…

QToolbar工具栏下拉菜单不弹出有小箭头

这里说了怎么弹出&#xff1a;Qt 工具栏QToolBar添加带有弹出菜单的QAction_qt如何将action添加到工具栏-CSDN博客 然后如果你是在UI里面建立的action&#xff0c;并拖到了toolbar&#xff0c;并在代码中设置菜单&#xff0c;例如&#xff1a; ui->mytoolbar->setMenu(…

大数据专业为什么要学习Hadoop课程

在当今信息爆炸的时代&#xff0c;大数据成为了影响各行各业的重要因素&#xff0c;而Hadoop作为大数据处理的核心技术之一&#xff0c;自然成为大数据专业学生需要掌握的一项重要技能。本文将详细探讨大数据专业为何要学习Hadoop课程&#xff0c;帮助读者理解其必要性和实际应…

【C++】argc与argv

argc是一个整数&#xff0c;表示命令行参数的数量&#xff0c;包括程序的本身名称 argv是一个指向字符指针数组的指针&#xff0c;其中每个字符指针指向一个命令行参数的字符串 通常argv[0]存储程序的名称&#xff0c;argv[1], argv[2]等存储其他命令行参数值 #include<io…

DevExpress JS ASP.NET Core v24.1亮点 - 支持DateOnly/TimeOnly类型

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…

【HarmonyOS】键盘遮挡输入框UI布局处理

【HarmonyOS】键盘遮挡输入框UI布局处理 问题背景&#xff1a; 在开发输入框UI时&#xff0c;特别是登录页面的密码输入框靠下&#xff0c;或者是评论底部的pop弹框。 当我们输入框获得焦点后&#xff0c;键盘自下而上显示&#xff0c;一般情况下会遮挡住我们的UI布局。 导致…

Rust重写万物之——从头开始编写浏览器引擎

一款用 Rust 编写的全新“轮子”最近备受关注—— 因不满大公司垄断,Gosub 项目团队用 Rust 从头开始编写了一个新的浏览器引擎,目前 star 数已超过 3k。 Gosub 项目的诞生是因为不少用户对当前的 Web 浏览器现状感到不满。 尽管市面上有许多浏览器可供选择,但其中大多数…

如何在nginx中禁用Cookie

在 Nginx 中禁用 Cookies 可以通过清除或过滤请求和响应中的 Set-Cookie 头来实现。需要注意的是:禁用 Cookies 后,用户会丢失某些可能依赖 Cookies 的功能,比如登录状态、会话跟踪等。 1、第一种方法 可以使用 proxy_hide_header 指令隐藏 Set-Cookie 头 location / {proxy…

rk3568 适配 CAN

rk3568 适配CAN CAN(Controller Area Network),即控制器局域网,是一种高效可靠的串行通信协议。它广泛应用于汽车、工业自动化、医疗设备等领域,用于多个电子控制单元(ECU)之间的实时通信。 CAN总线的特点 多主控制: 网络上的任何节点都可以主动发起通信,无需中央控制…

抗辐照MCU芯片工艺解析:如何保障芯片的可靠性

行星探索、轨道飞行器任务和空间研究在内的太空项目需要创新的航天器系统技术提供通信与处理功能。随着商业航天的发展&#xff0c;对于航天电子系统需要考虑高可靠与高性能的同时&#xff0c;还需要考虑降低开发成本和缩短上市时间。 以MCU芯片AS32A401为例&#xff0c;该芯片…

python(自用查看版)

目录 1.注意事项 1.1 python的除法不是整除&#xff0c;得到的是浮点数 1.2算术符号基于数学的算术优先级。具体可自行查看。 1.3注释 1.4缩进 1.5换行 1.6常见关键字 1.7续行符 1.8报错 1.9赋值 1.10比较运算符 2.常量和表达式 3.变量 4.数据类型 4.1整型int …

微信小程序,点击bindtap事件后,没有跳转到详情页,有可能是app.json中没有正确配置页面路径

文章目录 1、index.wxml2、index.js检查点1. 确保目标页面存在2. 确保页面路径配置正确3. 检查页面接收参数productDetail.jsproductDetail.wxmlproductDetail.wxss 总结 1、index.wxml <!-- 商品搜索结果卡片容器 --><view class"search-result"><bl…

科技改变生活:最新智能开关、调光器及插座产品亮相

根据QYResearch调研团队的最新力作《欧洲开关、调光器和插座市场报告2023-2029》显示&#xff0c;预计到2029年&#xff0c;欧洲开关、调光器和插座市场的规模将攀升至57.8亿美元&#xff0c;并且在接下来的几年里&#xff0c;将以4.2%的复合年增长率&#xff08;CAGR&#xff…

OpenGL入门006——着色器在纹理混合中的应用

本节将理解顶点和片段着色器在纹理混合中的应用 文章目录 一些概念纹理时间依赖动画 实战简介dependenciesshader.fsshader.vsteenager.pngtex.png utilswindowFactory.hshader.hRectangleModel.hRectangleModel.cpp main.cppCMakeLists.txt最终效果 一些概念 纹理 概述&…

【9695】基于springboot+vue的学生就业管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取免费源码 项目描述 本学生就业管理系统以springboot作为框架&#xff…

C语言的进制表示【八进制,十六进制】

文章目录 C语言的进制表示【八进制&#xff0c;十六进制】题目介绍C语言的进制表示1. 十进制2. 八进制3. 十六进制4. 二进制 进制表示总结 C语言的进制表示【八进制&#xff0c;十六进制】 题目介绍 故事的起因是今天在群里看到有人发来的问题 //原题目 int main() {int a 0…

高通Quick板上安装编译Ros1 noetic,LeGO_LOAM,FAR_Planner和rslidar_sdk

环境要求&#xff1a; 这里quick板上安装的是Ubuntu20.04版本 Ros Noeti安装&#xff1a; 1.设置软件源&#xff1a; 官方提供的软件源&#xff1a; sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.…

一招解决Mac没有剪切板历史记录的问题

使用Mac的朋友肯定都为Mac的剪切功能苦恼过&#xff0c;旧内容覆盖新内容&#xff0c;导致如果有内容需要重复输入的话&#xff0c;就需要一次一次的重复复制粘贴&#xff0c;非常麻烦 但其实Mac也能够有剪切板历史记录功能&#xff0c;iCopy&#xff0c;让你的Mac也能拥有剪切…