当前位置: 首页 > news >正文

建设工程安全事故在哪个网站查网站策划编辑

建设工程安全事故在哪个网站查,网站策划编辑,html新闻列表,双城网站建设哪家好文章目录 播放器状态转换图播放器状态对应的消息#xff1a; 消息对象消息队列消息队列api插入消息获取消息初始化消息插入消息加锁初始化消息设置消息参数消息队列初始化清空消息销毁消息启动消息队列终止消息队列删除消息 消息队列#xff0c;用于发送#xff0c;设置播放… 文章目录 播放器状态转换图播放器状态对应的消息 消息对象消息队列消息队列api插入消息获取消息初始化消息插入消息加锁初始化消息设置消息参数消息队列初始化清空消息销毁消息启动消息队列终止消息队列删除消息 消息队列用于发送设置播放器的状态实现ui界面jikpalyer以及ffplay之间的通信 播放器状态转换图 实线箭头连接的状态变化通过 API 调⽤完成 虚线箭头连接的状态变化是通过 播放器内部执⾏完特定任务或者发⽣错误 ⽽⾃动发⽣的状态 变化 播放器状态对应的消息 idle: MP_STATE_IDLE 闲置状态刚完成构造的 FijkPlayeinitialized MP_STATE_INITIALIZED 初始化完成状态和 idle 状态相⽐仅是多了输⼊媒体 数据源的信息async_preparingMP_STATE_ASYNC_PREPARING 异步准备状态进行打开媒体⽂件打开解码器以及新建解码线程新建数据 read 线程打开⾳频输出设备新建视频输出线程等preparedMP_STATE_PREPARED完成指定任务后⾃动转化为此状态。此状态下已经缓冲并解码了⼀部分⾳视频数据可以随时进⾏播放startedMP_STATE_STARTED 媒体视频、⾳频正在播放中pausedMP_STATE_PAUSED 媒体视频、⾳频播放暂停completedMP_STATE_COMPLETED 媒体视频、⾳频播放完成。 可重新从头开始播 放。stop: MP_STATE_STOPPED 播放器各种线程占⽤资源都已经释放。 ⾳频设备关闭error MP_STATE_ERROR 播放器出现错误 消息对象 typedef struct AVMessage {int what; // 消息类型int arg1; // 参数1int arg2; // 参数2void *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;recycle_msg 用于回收消息消息使用链表进行存储当消息取出时通过recycle_msg链接该消息重新用做新消息使用 作用节省了对新消息申请空间以及对取出的消息释放内存操作 消息队列api 插入消息 // 消息队列内部重新去构建 AVMessage重新申请AVMessage或者来自于recycle_msg // 新的消息插入到尾部 int msg_queue_put_private(MessageQueue *q, AVMessage *msg) {AVMessage *msg1;if(q-abort_request)return -1;//1. 消息体使用回收的资源还是重新mallocmsg1 q-recycle_msg;if(msg1) {q-recycle_msg msg1-next;q-recycle_count;} else {q-alloc_count;msg1 (AVMessage *)av_malloc(sizeof(AVMessage));}*msg1 *msg;msg1-next NULL;if(!q-first_msg) {q-first_msg msg1;} else {q-last_msg-next msg1;}q-last_msg msg1;q-nb_messages;SDL_CondSignal(q-cond);return 0; }获取消息 int msg_queue_get(MessageQueue *q, AVMessage *msg, int block) {AVMessage *msg1;int ret;SDL_LockMutex(q-mutex);for(;;) {if(q-abort_request) {ret -1;break;}//获取消息msg1 q-first_msg;if(msg1) {q-first_msg msg1-next;if(!q-first_msg)q-last_msg NULL;q-nb_messages--;*msg *msg1;msg1-obj NULL;msg1-next q-recycle_msg;q-recycle_msg msg1;ret 1;break; // 记得这里有个break的} else if (!block) {ret 0;break;} else {SDL_CondWait(q-cond, q-mutex);}}SDL_UnlockMutex(q-mutex);return ret; }初始化消息 // 消息队列初始化 void msg_queue_init(MessageQueue *q) {memset(q, 0, sizeof(MessageQueue));q-mutex SDL_CreateMutex();q-cond SDL_CreateCond();q-abort_request 1; }插入消息加锁 int msg_queue_put(MessageQueue *q, AVMessage *msg) {int ret;SDL_LockMutex(q-mutex);ret msg_queue_put_private(q, msg);SDL_UnlockMutex(q-mutex);return ret; } 初始化消息 void msg_init_msg(AVMessage *msg) {memset(msg, 0, sizeof(AVMessage)); }设置消息参数 void msg_queue_put_simple1(MessageQueue *q, int what) {AVMessage msg;msg_init_msg(msg);msg.what what;msg_queue_put(q, msg); }// 释放msg的obj资源 void msg_obj_free_l(void *obj) {av_free(obj); } //插入消息带消息类型带2个参数带obj void msg_queue_put_simple4(MessageQueue *q, int what, int arg1, int arg2, void *obj, int obj_len) {AVMessage msg;msg_init_msg(msg);msg.what what;msg.arg1 arg1;msg.arg2 arg2;msg.obj av_malloc(obj_len);memcpy(msg.obj, obj, obj_len);msg.free_l msg_obj_free_l;msg_queue_put(q, msg); }消息队列初始化 void msg_queue_init(MessageQueue *q) {memset(q, 0, sizeof(MessageQueue));q-mutex SDL_CreateMutex();q-cond SDL_CreateCond();q-abort_request 1; }清空消息 // 消息队列flush清空所有的消息 void msg_queue_flush(MessageQueue *q) {AVMessage *msg, *msg1;SDL_LockMutex(q-mutex);for (msg q-first_msg; msg ! NULL; msg msg1) { // 这个时候的obj没有清空那会导致泄漏实际是把消息对象暂存到了recycle_msgmsg1 msg-next;msg-next q-recycle_msg;q-recycle_msg msg;}q-last_msg NULL;q-first_msg NULL;q-nb_messages 0;SDL_UnlockMutex(q-mutex);}销毁消息 void msg_queue_destroy(MessageQueue *q) {msg_queue_flush(q);SDL_LockMutex(q-mutex);while(q-recycle_msg) {AVMessage *msg q-recycle_msg;if (msg)q-recycle_msg msg-next;msg_free_res(msg);av_freep(msg);}SDL_UnlockMutex(q-mutex);SDL_DestroyMutex(q-mutex);SDL_DestroyCond(q-cond); }启动消息队列 void msg_queue_start(MessageQueue *q) {SDL_LockMutex(q-mutex);q-abort_request 0;// 插入一个消息AVMessage msg;msg_init_msg(msg);msg.what FFP_MSG_FLUSH;msg_queue_put_private(q, msg);SDL_UnlockMutex(q-mutex); }终止消息队列 void msg_queue_abort(MessageQueue *q) {SDL_LockMutex(q-mutex);q-abort_request 1;SDL_CondSignal(q-cond);SDL_UnlockMutex(q-mutex); }删除消息 // 消息删除 把队列里同一消息类型的消息全删除掉 void msg_queue_remove(MessageQueue *q, int what) {AVMessage **p_msg, *msg, *last_msg;SDL_LockMutex(q-mutex);last_msg q-first_msg;if (!q-abort_request q-first_msg) {p_msg q-first_msg;while (*p_msg) {msg *p_msg;if (msg-what what) { // 同类型的消息全部删除*p_msg msg-next;msg_free_res(msg);msg-next q-recycle_msg; // 消息体回收q-recycle_msg msg;q-nb_messages--;} else {last_msg msg;p_msg msg-next;}}if (q-first_msg) {q-last_msg last_msg;} else {q-last_msg NULL;}}SDL_UnlockMutex(q-mutex); }
http://www.w-s-a.com/news/53182/

相关文章:

  • iis怎么建设网站特色产品推广方案
  • 道路建设网站专题品牌网站建设特色大蝌蚪
  • 网站开发组合 所有组合如何做com的网站
  • 电商网站怎么做的Wordpress 报表的插件
  • 纹理网站推荐买了两台服务器可以做网站吗
  • 机关公文写作网站南宁互联网推广
  • 五指山网站开发价格免费申请网站域名
  • 帝国音乐网站怎么做数据表电脑优化软件
  • 做国外网站收款怎么收建筑人才招聘网站
  • 毕设做桌面端还是网站sns社交网站 建设
  • 建设一个网站需要注意哪些内容wordpress 进销存
  • 沈阳市建设局网站sem优化师是什么意思
  • 餐饮vi设计公司网站排名优化方法讲解
  • 无线昆明官方网站可以做书的网站
  • 信誉最好的20个网投网站凡科网站建设之后怎么删除
  • 天津网站开发技术广州网站优化公司排名
  • 养老做增减的网站医院网站怎么做优化排名
  • 企业网站的推广方法有哪些上海猎头公司前十名
  • 电商网站建设建议免费下载app
  • 网站搭建设计是什么意思百度地图放到网站上
  • 东莞网站建设市场分析淘宝网站框架
  • 新网站多久被百度收录网站空间单位
  • 2017常用的网站昆明网站代理
  • 成都海鸥手表网站安阳网站建设策划
  • 做好的网站怎么发布做网站应该做哪方面的
  • 可以找厂家的网站品牌创意型网站开发
  • 有没有做牛羊角的网站电商网站报价
  • 网站建设行业咨讯文章网站兼容模式怎么设置
  • 商务网站建设概念东莞做网站的公司吗
  • 高稳定性的网站设计制作wordpress 检测插件