Files
gdmp/ffmsg_queue.h
2025-09-25 16:56:53 +08:00

64 lines
2.4 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef FFMSG_QUEUE_H
#define FFMSG_QUEUE_H
#include "SDL.h"
typedef struct AVMessage {
int what; // 消息类型
int arg1; // 参数1
int arg2; // 参数2
void *obj; // 如果arg1 arg2还不够存储消息则使用该参数
void (*free_l)(void *obj); // obj的对象是分配的这里要给出函数怎么释放
struct AVMessage *next; // 下一个消息
} AVMessage;
typedef struct MessageQueue { // 消息队列
AVMessage *first_msg, *last_msg; // 消息头,消息尾部
int nb_messages; // 有多少个消息
int abort_request; // 请求终止消息队列
SDL_mutex *mutex; // 互斥量
SDL_cond *cond; // 条件变量
AVMessage *recycle_msg; // 消息循环使用
int recycle_count; // 循环的次数,利用局部性原理
int alloc_count; // 分配的次数
} MessageQueue;
// 释放msg的obj资源
void msg_free_res(AVMessage *msg);
// 私有插入消息
int msg_queue_put_private(MessageQueue *q, AVMessage *msg);
//插入消息
int msg_queue_put(MessageQueue *q, AVMessage *msg);
// 初始化消息
void msg_init_msg(AVMessage *msg);
// 插入简单消息,只带消息类型,不带参数
void msg_queue_put_simple1(MessageQueue *q, int what);
// 插入简单消息只带消息类型只带1个参数
void msg_queue_put_simple2(MessageQueue *q, int what, int arg1);
// 插入简单消息只带消息类型带2个参数
void msg_queue_put_simple3(MessageQueue *q, int what, int arg1, int arg2);
// 释放msg的obj资源
void msg_obj_free_l(void *obj);
//插入消息带消息类型带2个参数带obj
void msg_queue_put_simple4(MessageQueue *q, int what, int arg1, int arg2, void *obj, int obj_len);
// 消息队列初始化
void msg_queue_init(MessageQueue *q);
// 消息队列flush清空所有的消息
void msg_queue_flush(MessageQueue *q);
// 消息销毁
void msg_queue_destroy(MessageQueue *q);
// 消息队列终止
void msg_queue_abort(MessageQueue *q);
// 启用消息队列
void msg_queue_start(MessageQueue *q);
// 读取消息
/* return < 0 if aborted, 0 if no msg and > 0 if msg. */
int msg_queue_get(MessageQueue *q, AVMessage *msg, int block);
// 消息删除 把队列里同一消息类型的消息全删除掉
void msg_queue_remove(MessageQueue *q, int what);
#endif // FFMSG_QUEUE_H