st_thread_join协程间通信介绍—StateThreads基础函数介绍

在进行多线程编程的时候,我们通常会使用 pthread_join() 函数来等待一个线程的结束。StateThread 也为我们提供了一个 st_thread_join() 函数来等待某个协程的结束。

下面就用一个小例子 join.c 来演示一下 st_thread_join() 函数的用法。

arduino 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include "st.h"

int do_something(void *arg) {
    st_utime_t time_now = st_utime();
    printf("do_something %lld \r\n", time_now);
    return 8;
}

int main(int argc, char *argv[]) {
    if (st_init() < 0) {
        perror("st_init");
        exit(1);
    }

    _st_thread_t *pid = st_thread_create((void *) do_something, NULL, 1, 0);
    if (pid == NULL) {
        perror("st_thread_create");
        exit(1);
    }

    void *return_num;
    st_thread_join(pid, &return_num);
    printf("get thread num %d\r\n", return_num);

    st_thread_exit(NULL);

    /* 不会运行到这里 */
    return 1;
}

上面的代码重点是 st_thread_create() 创建协程的时候,必须把 joinable 参数设置为 1,这样这个协程才是可以 join 的。

请把 join.c 放到 example 目录下。然后参考前面的文章修改一下 makefile 的编译规则。

程序的运行效果如下:

关于 st_thread_join() 的内部实现分析,请阅读《st_thread_join协程间通信原理


本文是《 SRS原理 》一书中的文章,如需观看更多内容,请购买本书。

相关推荐
redreamSo28 分钟前
HeyGen 开源了一个"用 HTML 写视频"的框架,我研究了一下,发现事情没那么简单
前端·开源·音视频开发
MonkeyKing30 分钟前
iOS 音频会话 AVAudioSession 完整机制:分类、模式、激活策略
ios·音视频开发
JMchen1236 天前
集成第三方 C/C++ 库到 Android NDK 项目:OpenCV 与 FFmpeg 实战指南
opencv·ffmpeg·音视频开发·cmake·jni·ndk·abi 兼容性
qwfy7 天前
从零实现一个 IM + 直播 App:Kotlin + Compose 多模块架构全流程记录
app·音视频开发·直播
音视频牛哥11 天前
鸿蒙 NEXT 下 RTSP/RTMP 播放器如何实时调节音量、亮度、对比度与饱和度?
harmonyos·音视频开发·直播
冬奇Lab11 天前
音视频同步与渲染:PTS、VSYNC 与 SurfaceFlinger 的协作之道
android·音视频开发
冬奇Lab14 天前
MediaPlayer 播放器架构:NuPlayer 的 Source/Decoder/Renderer 三驾马车
android·音视频开发·源码阅读
冬奇Lab15 天前
硬件加速与 OMX/Codec2:解密编解码器的底层世界
android·音视频开发·视频编码
冬奇Lab16 天前
MediaCodec 编解码基础:Buffer 队列、状态机与零拷贝的艺术
android·音视频开发·源码阅读
冬奇Lab17 天前
Camera HAL3 接口:Android 相机的真正底牌
android·音视频开发·源码阅读