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

设计出色的网站青岛网站设计

设计出色的网站,青岛网站设计,河北专业做网站,杭州网站建设第一品牌一、需求 在做播放器的时候,很多的模块会创建一个线程,然后在这个线程上跑单独的功能,同时,需要对这个线程进行控制,比如暂停,继续等,如播放器的解码,解封装等,都需要对…

一、需求

在做播放器的时候,很多的模块会创建一个线程,然后在这个线程上跑单独的功能,同时,需要对这个线程进行控制,比如暂停,继续等,如播放器的解码,解封装等,都需要对对应的线程进行控制,那么为了方便的进行控制,所以引入单独的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.mmbaike.com/news/26593.html

相关文章:

  • 公司网站页面加密全网营销国际系统
  • 网络培训资格证书如何获得谷歌seo优化怎么做
  • 幼儿园网站建设的好处快速seo软件
  • 商超软件系统哪家好台州seo优化公司
  • 招聘网站咋做爱站关键词挖掘
  • 网站建设与管理的实训报告市场营销网络
  • 淄博学校网站建设哪家好关键词优化排名网站
  • 有域名如何建网站什么是搜索引擎竞价推广
  • 多米诺网站建设营销策略都有哪些
  • 做网站需要注意哪些东西免费宣传平台
  • 网页游戏网站建设搜索引擎优化的各种方法
  • 专业做网站建设公司哪家好技成培训网
  • wordpress个人简历苏州seo网站推广哪家好
  • 政府部门网站建设的重要意义四川seo推广方案
  • 荆州网站建设多少钱seo工作内容有哪些
  • 做趣味图形的网站上海培训机构
  • 做数学题好的网站西安seo技术培训班
  • 江苏建科建设监理有限公司网站全面的seo网站优化排名
  • 移动web网站开发网页要求厦门seo专业培训学校
  • 杭州网站建设方案推广seo友情链接
  • 网站如何防止别人抄袭怎么开网站详细步骤
  • 杭州模板网站好上海免费关键词排名优化
  • 怎么做自己的网站免费河源seo
  • 北京网站设计培训机构精准营销包括哪几个方面
  • 河南官网网站建设报价网站seo推广
  • 旅游网站开发需求分析目的怎么做好网站搜索引擎优化
  • 做模型常说的d站是什么网站app推广的常用方法
  • 附近建网站公司排名优化工具
  • yy陪玩网站怎么做sem扫描电镜
  • 专业做破碎机的网站公关公司