




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ACE的进程管理 2007年08月09日 星期四 21:03The ACE Process Management Class RelationshipsACE_Process使用ACE_Process类派生进程有两个步骤:1)创建一个新的ACE_Process_Options对象,为新的子进程指定合乎你需要的属性;2)用ACE_Process:spawn()方法派生新进程。#include #include #include int ACE_TMAIN(int argc, ACE_TCHAR* argv) if (argc 1) ACE_DEBUG(LM_DEBUG, ACE_TEXT(%P): I am a child process.n); return 0; else ACE_Process_Options options; mand_line(%s %d, argv0, 1); ACE_Process child; pid_t pid = child.spawn(options); if (pid = -1) ACE_ERROR_RETURN(LM_ERROR, ACE_TEXT(%pn), ACE_TEXT(spawn), -1); ACE_DEBUG(LM_DEBUG, ACE_TEXT(%P): Spawn a child process (%d).n), pid); ACE_exitcode status; child.wait(&status); ACE_DEBUG(LM_DEBUG, ACE_TEXT(%P): Child process (%d) terminated with exit code %d.n), pid, status); return 0;ACE_Process_OptionsThe ACE_Process_Options对象负责携带新进程的各个选项。ACE_Process_ManagerACE_Process_Manager允许用户通过单次调用派生多个进程,并等待它们终止:#include #include static const int NCHILDREN = 5;int ACE_TMAIN(int argc, ACE_TCHAR *argv) if (argc 1) / Running as a child. ACE_OS:sleep(10); else / Running as a parent. / Get the processwide process manager. ACE_Process_Manager* pm = ACE_Process_Manager:instance(); / Specify the options for the new processes / to be spawned. ACE_Process_Options options; mand_line(ACE_TEXT(%s a), argv0); / Spawn two child processes. pid_t pidsNCHILDREN; pm-spawn_n(NCHILDREN, options, pids); / Destroy the first child. pm-terminate(pids0); / Wait for the child we just terminated. ACE_exitcode status; pm-wait(pids0, &status); / Get the results of the termination.#if !defined(ACE_WIN32) if (WIFSIGNALED(status) != 0) ACE_DEBUG(LM_DEBUG, ACE_TEXT(%d died because of a signal ) ACE_TEXT(of type %dn), pids0, WTERMSIG(status);#else ACE_DEBUG (LM_DEBUG, ACE_TEXT(The process terminated with exit code %dn), status);#endif /*ACE_WIN32*/ / Wait for all (only NCHILDREN - 1 left) of the / children to exit. pm-wait(0); return 0;你还可以登记事件处理器,让它们在子进程终止时被回调:#include #include #include static const int NCHILDREN = 5;class DeathHandler: public ACE_Event_Handlerpublic: DeathHandler () : count_(0) ACE_TRACE(ACE_TEXT(DeathHandler:DeathHandler); virtual int handle_exit(ACE_Process* process) ACE_TRACE(ACE_TEXT(DeathHandler:handle_exit); ACE_DEBUG (LM_DEBUG, ACE_TEXT(Process %d exited with exit code %dn), process-getpid (), process-return_value(); if (+count_ = NCHILDREN) ACE_Reactor:instance()-end_reactor_event_loop(); return 0; private: int count_;int ACE_TMAIN(int argc, ACE_TCHAR *argv) if (argc 1) / Running as a child. return 0; / Instantiate a process manager with space for / 10 processes. ACE_Process_Manager pm(ACE_Process_Manager:DEFAULT_SIZE, ACE_Reactor:instance (); / Create a process termination handler. DeathHandler handler; / Specify the options for the new processes to be spawned. ACE_Process_Options options; mand_line(ACE_TEXT (%s a), argv0); / Spawn two child processes. pid_t pidsNCHILDREN; pm.spawn_n(NCHILDREN, options, pids); / Register handler to be called when these processes exit. for (int i = 0; i run_reactor_event_loop(); return 0;ACE_Process_MutexACE_Process_Mutex:acquire();/获取互斥体ACE_Process_Mutex:release();/释放互斥体#include #include #include #include class GResourceUserpublic: GResourceUser(ACE_Process_Mutex &mutex) : gmutex_(mutex) ACE_TRACE(ACE_TEXT(GResourceUser:GResourceUser); void run (void) ACE_TRACE(ACE_TEXT(GResourceUser:run); int count = 0; while (count+ gmutex_.acquire(); ACE_ASSERT(result = 0); ACE_DEBUG(LM_DEBUG, ACE_TEXT(%P| %t) has the mutexn); / Access Global resource ACE_OS:sleep(1); result = this-gmutex_.release(); ACE_ASSERT(result = 0); ACE_OS:sleep(1); / Give other process a chance. private: ACE_Process_Mutex &gmutex_;int ACE_TMAIN (int argc, ACE_TCHAR *argv) if (argc 1) / Run as the child. / Create or get the global mutex. ACE_Process_Mutex mutex(GlobalMutex); GResourceUser acquirer(mutex); acquirer.run(); else / Run as the parent. ACE_Process_Options options; mand_line(%s a, argv0); ACE_Process processa, processb; pid_t pida = processa.spawn(options); pid_t pidb = processb.spawn(options); ACE_DEBUG (LM_DEBUG, ACE_TEXT(Spawned processes; pids %d:%dn), pid
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年房地产物业管理服务规范资格统考考核试卷
- 2025年传媒行业新型主流媒体建设法治人才(如法治记者、法律评论员)培养合规考核试卷
- 2025年行政诉讼法资格准入应用考核试卷
- 2025年智能制造系统集成项目整体管理案例考核试卷
- 难点解析人教版八年级物理上册第5章透镜及其应用专项训练练习题(解析版)
- 难点解析-人教版八年级物理上册第5章透镜及其应用-透镜同步测评试卷(详解版)
- 数的认识与运算的内容和本质发布者:陈为强20250924 09445.0分(1个)评价 收藏 3点赞评论 2022年版义务教育数学课程标准指出课程内容的组织“要凸显整体性、一致性和阶段性”
- 难点解析-人教版八年级物理上册第6章质量与密度-质量专题攻克试题(含详细解析)
- 解析卷人教版八年级物理上册第4章光现象-光的色散专项攻克练习题(含答案详解)
- 解析卷人教版八年级物理上册第4章光现象专项测评试卷(含答案详解)
- 2025中医技能考试题及答案
- 产品预购合同(标准版)
- 铁路工作安全培训课件
- 水泥厂设备巡检规程
- 2025年小学心理健康学科新课程标准考试测试卷
- 城乡街道环卫清洁服务方案投标文件(技术标)
- 2.1《地形》(课件)-八年级地理上册人教版
- 装载机培训教材
- 人教版七年级英语上下册必背中考完形填空高频词及默写练习
- 2024-2025学年度菏泽家政职业学院单招《语文》试卷附答案详解【典型题】
- 年产单面线路板0.6万平方米、双面线路板24万平方米、多层线路板1.2万平方米建设项目环评报告表
评论
0/150
提交评论