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

台州地区网站建设泰安医院网站建设

台州地区网站建设,泰安医院网站建设,手机个人简历模板下载,国内永久免费crm系统网站推荐引言#xff1a; 此次我们重新封装线程#xff0c; 采用基于对象编程的方式#xff0c;不用于面向对象编程中重定义虚函数的方式#xff0c;这里我们用回调函数的方式。 Thread.h 1 #ifndef THREAD_H_2 #define THREAD_H_3 4 #include boost/noncopyable.hpp5 #inc…引言 此次我们重新封装线程 采用基于对象编程的方式不用于面向对象编程中重定义虚函数的方式这里我们用回调函数的方式。 Thread.h 1 #ifndef THREAD_H_2 #define THREAD_H_3 4 #include boost/noncopyable.hpp5 #include functional6 #include pthread.h7 8 class Thread : boost::noncopyable9 { 10 public: 11 typedef std::functionvoid () ThreadCallback; 12 13 Thread(ThreadCallback callback); 14 ~Thread(); 15 16 void start(); 17 void join(); 18 19 static void *runInThread(void *); 20 21 private: 22 pthread_t threadId_; 23 bool isRunning_; 24 ThreadCallback callback_; //回调函数 25 }; 26 27 28 29 #endif //THREAD_H_   可以看到没有重定义虚函数 而是设置了一个函数适配器 用于保存我们想要的业务逻辑。 直接用 静态函数 runInThread 调用 callback_即可。   Thread.cpp 1 #include Thread.h2 3 Thread::Thread(ThreadCallback callback)4 : threadId_(0),5 isRunning_(false),6 callback_(std::move(callback))7 {8 9 } 10 11 Thread::~Thread() 12 { 13 if(isRunning_) 14 { 15 //detach 16 pthread_detach(threadId_); 17 } 18 } 19 20 void Thread::start() 21 { 22 pthread_create(threadId_, NULL, runInThread, this); 23 isRunning_ true; 24 } 25 void Thread::join() 26 { 27 pthread_join(threadId_, NULL); 28 isRunning_ false; 29 } 30 31 void *Thread::runInThread(void *arg) 32 { 33 Thread *pt static_castThread*(arg); 34 pt-callback_(); //调用回调函数 35 36 return NULL; 37 } 以上 有几点经验处理 Google推荐 当Thread 这个类析构时如果线程还没有执行完 那么就detach。 并设置一个标志位 bool isRunning 标志线程是否启动。   测试代码 1 #include Thread.h2 #include stdio.h3 #include unistd.h4 using namespace std;5 6 void foo()7 {8 while(1)9 { 10 printf(foo\n); 11 sleep(1); 12 } 13 } 14 15 16 17 int main(int argc, char const *argv[]) 18 { 19 Thread t(foo); 20 21 t.start(); 22 t.join(); 23 24 return 0; 25 } 可以看到 当用基于对象编程时 不需要在定义用户自己的类了 只需在主函数传入一个函数适配器即可。 具体函数类型可以用bind来实现。   测试代码2 1 #include Thread.h2 #include stdio.h3 #include unistd.h4 using namespace std;5 6 class Foo7 {8 public:9 void foo(int i) 10 { 11 while(1) 12 { 13 printf(foo %d\n, i); 14 sleep(1); 15 } 16 } 17 }; 18 19 20 21 int main(int argc, char const *argv[]) 22 { 23 Foo f; 24 int i 34; 25 Thread t(bind(Foo::foo, f, i)); 26 27 t.start(); 28 t.join(); 29 30 return 0; 31 }   对于 类的成员函数 同理使用 大杀器bind  转载于:https://www.cnblogs.com/DLzhang/p/4023369.html
http://www.zqtcl.cn/news/754908/

相关文章:

  • 备案查询网站网站的登录弹窗怎么做
  • 网站开发 mvc北京建设工程主管部门网站
  • 淮安建设机械网站制作代理公司注册需要多少钱
  • 站长收录茌平建设局网站
  • 如何进行网站开发开发区人才
  • 网站制作 视频网站维护的主要内容包括
  • 快速企业建站深圳网站关键词优化推广
  • 如何开网店详细步骤东莞市网络seo推广
  • 个人可以做哪些有意思的网站网站和网站的app
  • 北京高端网站开发公司网站建设后台实训体会
  • 青岛海川建设集团有限公司网站wordpress 变私有云
  • 网站备案人可以改吗石大网页设计与网站建设客观题
  • 宁波网站优化方案免费关键词挖掘工具
  • 网站制作想法免费做效果图网站
  • 晓风彩票网站建设软件微信上发的链接网站怎么做的
  • 关键词有哪几种台州优秀关键词优化
  • 盐田区住房和建设局网站软件开发文档怎么编写
  • 网站响应式建设seo排名优化怎样
  • 山东 网站备案德清县建设局网站
  • 中英语双语网站咋做提供网站建设设计外包
  • 云网站功能江门网站seo关键词排名优化
  • 潍坊网站建设外贸制作html网站
  • 网站友情链接怎么添加定制酒营销方案
  • 目前最流行网站开发软件泰州市建设工程招标网
  • 福州网站优化me域名网站
  • 网站 案例互联网外包公司值得去吗
  • 做医疗护具网站浙江立鹏建设有限公司网站
  • 织梦制作手机网站c 网站开发需要学什么软件
  • 罗湖网站制作阿里巴巴开店网站怎么做
  • 深圳住房和建设局网站 招标怎样建设自己的视频网站