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

河北建设部网站淄博人才网官网首页

河北建设部网站,淄博人才网官网首页,wordpress插件关闭更新,肇庆seo按天计费一、需求 在做播放器的时候,很多的模块会创建一个线程,然后在这个线程上跑单独的功能,同时,需要对这个线程进行控制,比如暂停,继续等,如播放器的解码,解封装等,都需要对…

一、需求

在做播放器的时候,很多的模块会创建一个线程,然后在这个线程上跑单独的功能,同时,需要对这个线程进行控制,比如暂停,继续等,如播放器的解码,解封装等,都需要对对应的线程进行控制,那么为了方便的进行控制,所以引入单独的thread封装,并且导出对应的回调接口。

二、实现

1. com_thread.h

#pragma once#include <thread>
#include <atomic>class IThreadSink
{
public:virtual ~IThreadSink() {}virtual void onThreadCreate() = 0;virtual void onThreadDestroy() = 0;virtual void onThreadRun() = 0;virtual void onThreadPause() = 0;virtual void onThreadTask() = 0;
};class IThread
{typedef enum{STAT_WAIT,STAT_RUN,STAT_PAUSE,STAT_QUIT}ThreadStat;public:virtual ~IThread() {}IThread(IThreadSink* _sink);void threadCreate();void threadDestroy();void run();void pause();
private:std::atomic<int> _stat_cur;std::atomic<int> _stat_set;std::thread _thread;IThreadSink* _sink;bool _is_init;void _threadTaskInternal();void _setStat(ThreadStat stat);
};

2. com_thread.c

#include "com_thread.h"IThread::IThread(IThreadSink* sink):_stat_cur(STAT_WAIT),_stat_set(STAT_WAIT),_sink(NULL),_is_init(false)
{_sink = static_cast<IThreadSink*>(sink);
}void IThread::threadCreate()
{if (_is_init){return;}_thread = std::thread(&IThread::_threadTaskInternal, this);_is_init = true;
}
void IThread::threadDestroy()
{if (!_is_init){return;}_setStat(STAT_QUIT);_thread.join();_is_init = false;
}
void IThread::run()
{if (!_is_init){return;}if (_stat_cur == STAT_WAIT || _stat_cur == STAT_PAUSE){_setStat(STAT_RUN);if (_sink){_sink->onThreadRun();}}
}
void IThread::pause()
{if (!_is_init){return;}if (_stat_cur == STAT_RUN){_setStat(STAT_PAUSE);if (_sink){_sink->onThreadPause();}}
}void IThread::_threadTaskInternal()
{if (_sink){_sink->onThreadCreate();}while (1){if ((_stat_cur == STAT_WAIT || _stat_cur == STAT_PAUSE) && _stat_cur == _stat_set){std::this_thread::sleep_for(std::chrono::milliseconds(1));continue;}if (_stat_cur != _stat_set){_stat_cur = _stat_set.load();}if (STAT_QUIT == _stat_cur){break;}if (STAT_WAIT == _stat_cur || STAT_PAUSE == _stat_cur){continue;}if (STAT_RUN == _stat_cur){_sink->onThreadTask();}}if (_sink){_sink->onThreadDestroy();}
}
void IThread::_setStat(ThreadStat stat)
{_stat_set = stat;while (_stat_cur == stat){std::this_thread::sleep_for(std::chrono::milliseconds(1));}
}

3. demo.cpp

#include <iostream>
#include "com_thread.h"class ThreadTestDemo :public IThreadSink
{
public:virtual void onThreadCreate() override{std::cout << "Create" << std::endl;}virtual void onThreadDestroy() override{std::cout << "Destroy" << std::endl;}virtual void onThreadRun() override{std::cout << "Run" << std::endl;}virtual void onThreadPause() override{std::cout << "Pause" << std::endl;}virtual void onThreadTask() override{std::this_thread::sleep_for(std::chrono::milliseconds(100));std::cout << "do task!!!" << std::endl;}void test(){IThread* _thread = new IThread(this);_thread->threadCreate();std::this_thread::sleep_for(std::chrono::milliseconds(1000));for (int i = 0; i < 3; i++){_thread->run();std::this_thread::sleep_for(std::chrono::milliseconds(1000));_thread->pause();std::this_thread::sleep_for(std::chrono::milliseconds(2000));}_thread->threadDestroy();delete _thread;}
};
http://www.yayakq.cn/news/659659/

相关文章:

  • 站长工具在线单页面网站
  • 最新章节 62.一起来做网站吧品牌建设运用经济生活知识
  • 中小企业服务中心网站建设做网站一万
  • 商洛市建设工程造价管理站网站做网站需要视频衔接怎么
  • 集团公司网站源码下载wordpress的链接功能
  • 什么是门户网站有哪些网站可以同时做竞价和优化吗
  • 什么是新闻源网站辽宁省建设工程信息网上不去
  • 扬州网站建设电话wordpress 分类子类名称
  • 网站静态页面访问很快php页面访问非常慢做网站找哪家好?聚禄鼎科技是一家给企业做网站的公司
  • 西宁网站建设嘉荐君博l好的公司网站制作
  • 网站当电话线邢台吧李彦明
  • 企业集团网站建设方案论文企业做网站要
  • 创建网站域名多少钱女生学建筑专业好吗
  • 网络营销网站建设知识动漫制作专业电脑配置
  • 一级a做网站免费织梦企业黄页网站源码
  • .net电子商城网站开发设计营销型网站规划步骤
  • 圣诞节网站模板制作简单门户网站步骤
  • 广州网站建设公司排名wordpress 原创主题
  • 建立网站有什么作用甘肃最新消息
  • 51游戏seo搜索排名优化是什么意思
  • 越秀学校网站建设wordpress主题结构讲解视频教程
  • html5制作网站开发晋城市网站建设
  • 成品网站wordpress 3.6升级4.7
  • 购物系统论文wordpress文章添加seo标题
  • 在线字体设计网站两学一做知识问答网站
  • 永州网站网站建设网站建设使用什么软件
  • 百色网站建设专业长春网站建设网
  • 电商网站开发服务生活中好的设计产品
  • 用python做网站开发的课程网络整合营销方案策划
  • 影视网站wordpress电子信息工程移动互联网方向