首页 > 其他分享 >SDL 线程创建(SDL_LockMutex / SDL_UnlockMutex、SDL_CondWait / SDL_CondSignal)

SDL 线程创建(SDL_LockMutex / SDL_UnlockMutex、SDL_CondWait / SDL_CondSignal)

时间:2023-08-17 12:00:39浏览次数:47  
标签:CondWait thread lock work cond CondSignal printf SDL

 

SDL_mutex* s_lock = NULL;
SDL_cond* s_cond = NULL;

int thread_work(void* arg)
{
	SDL_LockMutex(s_lock);

	printf("[thread_work] in .\n");

	Sleep(5000);

	printf("[thread_work] 好了,知道了,我刚刚去玩了5秒,我直接 SDL_CondWait 把锁给你我自己睡觉去了。你拿到锁之后操作完了,记得1:把锁释放掉(还给我) 2:唤醒我 .\n");

	SDL_CondWait(s_cond, s_lock); // 这里直接就阻塞了,等着被唤醒

	printf("[thread_work] 这么早叫醒我干嘛,好了,我去其它地方玩去了 !  .\n");

	SDL_UnlockMutex(s_lock);

	printf("[thread_work] out .\n");

	return 0;
}

#undef main
int main()
{
	s_lock = SDL_CreateMutex();
	s_cond = SDL_CreateCond();
	SDL_Thread* t = SDL_CreateThread(thread_work, "thread_work", NULL);
	
	for (int i = 0; i < 2; i++)
	{	
		Sleep(1000);
		printf("[main] for里的2次循环 每次间隔2秒 \n");
		
	}

	printf("[main] 老大我的工作做完了,我现在 SDL_LockMutex 就等着拿锁干你交代的第二个工作了,就等你给锁了. \n");
	SDL_LockMutex(s_lock); // 阻塞,直到获取为止,1.等别人 SDL_UnlockMutex 2.等别人 SDL_CondWait (这种方式你到时候记得解锁了还要唤醒别人)

	// 干第二个工作...

	SDL_UnlockMutex(s_lock); // 解锁
	SDL_CondSignal(s_cond); // 发送信号唤醒别人之前,请先把lock接掉。因为别人醒来之后也是之前有锁的状态,你不释放说不过去吧

	printf("[main] O 了 O 了, 我也走了 .... \n");

	SDL_WaitThread(t, NULL);
	SDL_DestroyMutex(s_lock);
	SDL_DestroyCond(s_cond);
	return 0;
}

 

标签:CondWait,thread,lock,work,cond,CondSignal,printf,SDL
From: https://www.cnblogs.com/fxw1/p/17637240.html

相关文章

  • ffmpeg 之 sdl
    使用ffmpeg解码视频渲染到sdl窗口前言使用ffmpeg解码视频并渲染视频到窗口,网上是有不少例子的,但是大部分例子的细节都不是很完善,比如资源释放、flush解码缓存、多线程优化等都没有。特别是想要快速搭建一个demo时,总是要重新编写不少代码,比较不方便,所以在这里提供一个完善的例子,......
  • codeblocks 配置SDL2、SDL2_image,找不到SDL2/SDL.h SDL.h SDL_image.h
    codeblocks配置SDL2、SDL2_image下载https://github.com/libsdl-org/SDL/releases/https://github.com/libsdl-org/SDL_image/releases1.解压将SDL2_image-devel-2.6.3-mingw.zip里面x86_64-w64-mingw32的lib、bin、include对应文件解压到SDL2-devel-2.28.2-mingw.zip\SDL2-......
  • Qt 调用倍福TwinCAT通讯模块(TcAdsDll)
    Qt实现TwinCAT通讯目前这种方式是通过调用TwinCAT提供的AdsApi与倍福PLC通讯的。要求本机安装TwinCAT(无需作为主机,但是可能这个api依赖TwinCAT的一些服务)。关于AdsApi的官方资料请看这里,有函数的详细解释,还有例子。你值得拥有。https://infosys.beckhoff.com/english.php?conte......
  • IDEA超强XSD文件编辑插件-XSD / WSDL Visualizer
    前言XSD/WSDLVisualizer可以简化XML架构定义(XSD)和WSDL文件编辑过程;通过使用与IntelliJ无缝集成的可视化编辑器,转换处理XSD和WSDL文件的方式。告别导航复杂和难以阅读的代码的挫败感,迎接流线型和直观的体验。插件安装在线安装IntelliJIDEA可通过在线安装的方式,安装时......
  • ffmpeg + SDL2播放音频示例
    在网上搜罗了各种各样的样例代码,都存在各种各样的问题,调了好长时间终于能无杂音播放了由于个人场景需要本样例加了选择扬声器的功能不过有的可能还会有问题,目前ogg的文件都能播,mp3有的不行写一下网上的其他代码可能存在的问题和我的修改注:代码是C++17,如果编不过需要小改一下......
  • FFmpeg+SDL实时解码和渲染H264视频流
    前言之前实现了Android手机摄像头数据的TCP实时传输,今天接着聊聊,如何在PC端把接收到的H264视频流实时解码并渲染出来。这次使用的语言是C++,框架有FFmpeg和SDL2。解码解码部分使用FFmpeg,首先,需要初始化H264解码器:intH264Decoder::init(){codec=avcodec_find_decoder(A......
  • 移植SDL到JZ2440显示BMP图片
    写这类教程的目的是,熟悉Linux基本操作和嵌入式开发流程,希望对你有所帮助. 前面我们讲过系统起来后开机LOGO的制作,韦老师第3期讲了如何显示jpeg图片,那么怎么显示bmp图片?这次我们借助libSDL来实现,我们先移植SDL到Ubuntu,体验它的威力后再移植到开发板。一、移植SDL到Ubun......
  • WSDL 详解
    [color=red][b]从wsdl生成java代码的命令[/b][/color][b]生成客户端文件1:[/b][color=darkblue]wsdl2java-pcom.neareast.test.cxf.client.WSDL2Java-frontendjaxws21http://localhost:9000/helloWorld?wsdl[/color][b]生成客户端文件2:[/b][color=darkblue]wsdl2java......
  • How to enable Vsync with Software Rendering in SDL [SOLVED]. 如何在SDL2下实现
    HowtoenableVsyncwithSoftwareRenderinginSDL[SOLVED].Hi,IjustfiguredoutthedirtywaytoenablevsyncwithsoftwarerenderingonSDL.Thiswasbotheringmeforaweeknow&I'veseenmanyquestionsonthenetwithoutanswer.ButIf......
  • idea 通过wsdl链接打包
    一导入依赖springboot项目依赖<dependency><groupId>org.apache.axis2</groupId><artifactId>axis2-kernel</artifactId><version>1.7.9</version></dependency>......