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
cpp 复制代码
#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_lock
    SDL_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后 释放锁

子线程拿到锁 输出文本并释放锁

主线程等待子线程结束后 结束流程

相关推荐
工藤新一¹14 天前
C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 20)
c++·单例模式·游戏引擎·sdl·c++游戏开发
工藤新一¹14 天前
C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 19)
开发语言·c++·游戏引擎·游戏开发·sdl
工藤新一¹18 天前
C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 16)
c++·游戏引擎·sdl·c++游戏开发·实践项目
工藤新一¹20 天前
C++/SDL进阶游戏开发 —— 双人塔防游戏(代号:村庄保卫战 13)
c++·游戏·游戏引擎·毕业设计·sdl·c++游戏开发·渲染库
Antonio91520 天前
【音视频】SDL简介
音视频·sdl
工藤新一¹20 天前
C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 14)
开发语言·c++·游戏引擎·游戏开发·sdl·实践项目
偶尔贪玩的骑士24 天前
Visual Studio2022 配置 SDL3及拓展库
c++·游戏·sdl
daqinzl3 个月前
FFmpeg+SDL实现简易视频播放器
ffmpeg·sdl·视频播放器
Moweiii5 个月前
SDL3 GPU编程探索
c++·游戏引擎·图形渲染·sdl·vulkan
橘子味的茶二6 个月前
SDL事件相关
sdl