ui修改
This commit is contained in:
63
ffmsg_queue.h
Normal file
63
ffmsg_queue.h
Normal file
@@ -0,0 +1,63 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user