网站大量收购独家精品文档,联系QQ:2885784924

ACE基本的多线程编程.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ACE基本的多线程编程(Basic Multithreaded Programming) 从ACE_Task_Base或ACE_Task派生你的线程对象,重载virtual int svc (void);虚函数,那就是线程的入口函数。 #include ace/OS.h #include ace/Task.h class HA_CommandHandler : public ACE_Task_Base { public: ??? virtual int svc(void) ??? { ??????? ACE_DEBUG((LM_DEBUG, ?????????????????? ACE_TEXT((%t) Handler Thread running\n))); ??????? ACE_OS::sleep(4); ??????? return 0; ??? } }; int ACE_TMAIN(int, ACE_TCHAR *[]) { ??? ACE_DEBUG((LM_DEBUG, ?????????????? ACE_TEXT((%t) Main Thread running\n))); ??? HA_CommandHandler handler; ??? int result = handler.activate(); ??? ACE_ASSERT(result == 0); ??? handler.wait(); ??? return 0; } 在激活线程(activate()方法)之后,主线程会调用处理器对象上的wait()方法,等待其线程完成,然后在继续执行,并退出main()函数。 使用线程互斥体ACE_Thread_Mutex 如果成功获得互斥体,进行获取的线程(acquire())继续向前执行;否则它就会阻塞,直到该互斥体的持有者释放它(release())为止。 #include ace/OS.h #include ace/Log_Msg.h #include ace/Task.h #include ace/Thread_Mutex.h class HA_Device_Repository { public: ??? HA_Device_Repository() ??? { } ??? void update_device(int device_id) ??? { ??????? //使用守卫 ??????? //ACE_GUARD(ACE_Thread_Mutex, mon, mutex_); ??????? ACE_GuardACE_Thread_Mutex guard(this-mutex_); ??????? //mutex_.acquire(); ??????? ACE_DEBUG((LM_DEBUG, ?????????????????? ACE_TEXT((%t) Updating device %d\n), ?????????????????? device_id)); ??????? ACE_OS::sleep(1); ??????? //mutex_.release(); ??? } private: ??? ACE_Thread_Mutex mutex_; }; class HA_CommandHandler : public ACE_Task_Base { public: ??? enum {NUM_USES = 10}; ??? HA_CommandHandler(HA_Device_Repository rep) : rep_(rep) ??? { } ??? virtual int svc(void) ??? { ??????? ACE_DEBUG((LM_DEBUG, ?????????????????? ACE_TEXT((%t) Handler Thread running\n))); ??????? for (int i=0; i NUM_USES; i++) ??????????? this-rep_.update_device(i); ??????? return 0; ??? } private: ??? HA_Device_Repository rep_; }; int ACE_TMAIN(int, ACE_TCHAR *[]) { ??? HA_Device_Repository rep; ??? HA_CommandHandler handler1(rep); ??? HA_CommandHandler handler2(rep); ??? handler1.activate(); ??? handler2.activate(); ??? hand

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档