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

金融投资网站方案分发平台

金融投资网站方案,分发平台,我想网,合肥网站建设之4个细节要注意简介 moduo中的线程不是像ACE,asio抽象出线程适配器基类,而是直接使用特定的线程数据ThreadData 线程 #mermaid-svg-j4PqpEcHxYvSkEI2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-j4Pqp…

简介

moduo中的线程不是像ACE,asio抽象出线程适配器基类,而是直接使用特定的线程数据ThreadData

线程

Thread
ThreadData

Thread

线程成员有

bool       started_;  //线程启动状态
bool       joined_;//是否调用join
pthread_t  pthreadId_;//线程id
pid_t      tid_;//线程id
ThreadFunc func_;//线程处理函数
string     name_;//线程名,没有指定时,默认是Thread+线程创建的个数
CountDownLatch latch_;//线程启动时,等待线程起来static AtomicInt32 numCreated_;//线程总个数

构造函数,latch_初始为1,设置默认线程名


Thread::Thread(ThreadFunc func, const string& n): started_(false),joined_(false),pthreadId_(0),tid_(0),func_(std::move(func)),name_(n),latch_(1)
{setDefaultName();
}void Thread::setDefaultName()
{int num = numCreated_.incrementAndGet();if (name_.empty()){char buf[32];snprintf(buf, sizeof buf, "Thread%d", num);name_ = buf;}
}

线程启动,设置started_ 为true,创建ThreadData数据,将线程执行函数func_,线程名name_,线程id引用tid_,线程同步latch_传给ThreadData,传给linux线程创建函数,线程启动函数为startThread,内部执行ThreadData的runInThread方法

void Thread::start()
{assert(!started_);started_ = true;// FIXME: move(func_)detail::ThreadData* data = new detail::ThreadData(func_, name_, &tid_, &latch_);if (pthread_create(&pthreadId_, NULL, &detail::startThread, data)){started_ = false;delete data; // or no delete?LOG_SYSFATAL << "Failed in pthread_create";}else{latch_.wait();assert(tid_ > 0);}
}void* startThread(void* obj)
{ThreadData* data = static_cast<ThreadData*>(obj);data->runInThread();delete data;return NULL;
}void runInThread(){*tid_ = muduo::CurrentThread::tid();tid_ = NULL;latch_->countDown();latch_ = NULL;muduo::CurrentThread::t_threadName = name_.empty() ? "muduoThread" : name_.c_str();::prctl(PR_SET_NAME, muduo::CurrentThread::t_threadName);try{func_();muduo::CurrentThread::t_threadName = "finished";}catch (const Exception& ex){muduo::CurrentThread::t_threadName = "crashed";fprintf(stderr, "exception caught in Thread %s\n", name_.c_str());fprintf(stderr, "reason: %s\n", ex.what());fprintf(stderr, "stack trace: %s\n", ex.stackTrace());abort();}catch (const std::exception& ex){muduo::CurrentThread::t_threadName = "crashed";fprintf(stderr, "exception caught in Thread %s\n", name_.c_str());fprintf(stderr, "reason: %s\n", ex.what());abort();}catch (...){muduo::CurrentThread::t_threadName = "crashed";fprintf(stderr, "unknown exception caught in Thread %s\n", name_.c_str());throw; // rethrow}}

ThreadData

线程数据,其成员有

  typedef muduo::Thread::ThreadFunc ThreadFunc;ThreadFunc func_;//线程处理函数string name_;//线程名pid_t* tid_;//线路idCountDownLatch* latch_;//同步调用线程和新建线程

构造函数

  ThreadData(ThreadFunc func,const string& name,pid_t* tid,CountDownLatch* latch): func_(std::move(func)),name_(name),tid_(tid),latch_(latch){ }

执行线程函数,设置线程tid_,同步计数减1,唤醒调用线程,设置当前线程名

void runInThread(){*tid_ = muduo::CurrentThread::tid();tid_ = NULL;latch_->countDown();latch_ = NULL;muduo::CurrentThread::t_threadName = name_.empty() ? "muduoThread" : name_.c_str();::prctl(PR_SET_NAME, muduo::CurrentThread::t_threadName);try{func_();muduo::CurrentThread::t_threadName = "finished";}catch (const Exception& ex){muduo::CurrentThread::t_threadName = "crashed";fprintf(stderr, "exception caught in Thread %s\n", name_.c_str());fprintf(stderr, "reason: %s\n", ex.what());fprintf(stderr, "stack trace: %s\n", ex.stackTrace());abort();}catch (const std::exception& ex){muduo::CurrentThread::t_threadName = "crashed";fprintf(stderr, "exception caught in Thread %s\n", name_.c_str());fprintf(stderr, "reason: %s\n", ex.what());abort();}catch (...){muduo::CurrentThread::t_threadName = "crashed";fprintf(stderr, "unknown exception caught in Thread %s\n", name_.c_str());throw; // rethrow}}
http://www.dtcms.com/wzjs/38480.html

相关文章:

  • 平顶山哪里做网站网站百度关键词seo排名优化
  • 长沙网站空间网络营销是什么专业
  • seo怎么给网站做外链seo对网店推广的作用有哪些
  • 个人动态网页制作的方法seo顾问咨询
  • qq钓鱼网站建设kol推广是什么意思
  • wordpress后台被黑淘宝seo是指什么
  • 贵州百度seo整站优化google搜索引擎优化
  • dw简述网站开发流程百度推广用户注册
  • 如何发布wordpress贵阳seo网站推广
  • ip怎么做网站南昌seo优化
  • python在线编程软件seo零基础入门到精通200讲
  • 西安建设网站排名电商运营工作内容
  • flash网站模板百度排名服务
  • 网站界面设计形考任务排名前十的大学
  • 做安卓开发要去看哪些网站上海百度推广官方电话
  • 建设工程质量管理条例网站aso优化费用
  • 镇江市建设工程招投标网站搜索引擎优化的英文缩写是什么
  • 网站做零售如何搜索网页关键词
  • wordpress 主题 星球百家号关键词排名优化
  • 做石膏选图形的网站宁国网络推广
  • 莱芜网站建设重庆百度快速优化
  • 十堰做网站的工作室网站seo关键词优化技巧
  • 凡科网的网站建设好用吗百度seo排名软件
  • 怎么做网站运营编辑的简历网络优化工程师简历
  • 广告设计软件培训中心西安市seo排名按天优化
  • 微信开发者版汕头seo外包平台
  • dedecms做视频网站优化网站打开速度
  • 备案域名租用网站优化排名网站
  • 单位做网站怎么做百度校招
  • 做淘客网站要多大的服务器百度seo关键词排名技术