转自:http://blog.csdn.net/mjp_mjp/article/details/4406059

1、多线程中的ACE_Reactor::EventLoop,当在多线程(池)中调用EventLoop时,需要注意,在Acceptor/EventHandler中要使用其中的方法Reactor()来获取ACE_Reactor的指针,不要使用ACE_Reactor::instance,道理很简单哟。不过,一定要注意,在编程时,使用Reactor()类方法,比使用单件的方法要好很多,起码安全,也不会破坏封装性。

2、ACE_Task中的Msg_Queue,这个类的确很迷人,不过要注意getq和putq都可能会引起阻塞,因此,最好使用超时的方式来调用它们,特别是在结束这个task时候。因为,你要清空msg_queue,如果不超时,你可能无法安全的退出线程。

3、ACE_Svc_Handler,这个类很好,它继承于ACE_Task,因此它有msg_queue,还可以被用于ACE的组件配置模型中。其中对于handle_output,要注意,因为它不会自动被框架调用,除非你使用了策略类ACE_Reactor_Notification_Strategy(msg_queue需要它,windows下用的是完成端口),它使用流控制方式通知你可以写。而且,在handle_output内,不要吝惜,一定要使用while,把msg_queue里面的message_block尽可能全部取出,然后发送出去(直到send返回-1,errono=EWOULDBLOCK)。

4、Acceptor/Handler,要在end_event_loop之前被清除。如果使用了new创建acceptor的话,最好在end_event_Loop前,注销它,即在handle_close时用参数DONT_CALL注销,并delete。如果你是在end_event_loop 后在删除它的话,ACE保证会让你遇到无法让你冷静的崩溃断言等致命错误 。有一种思想,就是如果new出来的对象指针,在程序退出前,一直没有变化,也就是说,对象依然被你掌控的话,你可以不用去delete,而且,这个也不叫内存泄露。因为现在的操作系统,在进程被杀死后,会清理进程使用过的空间。

5、善使局部类(在函数体中声明定义的类),严格意义上讲,这个不是ace范畴。局部类对象,可以共享全局/静态的数据,但是不能直接使用函数体内的数据;或者成员函数所在类内的变量,不过可以使用所在类指针,访问类的私用成员。这个很强悍,可以做一些很私密的处理。而且,可以利用这一点,返回一个局部类对象指针(当然是void*),而c++保证,外界无法访问访问它,更不能删除它。

6、EMSGSIZE,这个errorcode,我当初没有理解,只是在实践中碰到了,当你请求的数据length,小于实际数据长度时,会有这个error。这时,我们可以采取约定的方式,即,我们每次不得发送数据长度超过MTU的包,接收当然也不会超过这个数值。也不会报这个error。而且这样做有好处,起码可以防止别人恶意发送长度很大的包来攻击你。而且,更重要的是,小于MTU的数据不会被分包传输,数据安全而且可靠。这点对tcp/udp同样适用哟。

7、ace用于mfc环境,或者说用于共享库(dll、so等)时,最好在使用前使用ACE::init初始化一下,并在退出前使用ACE::fini。

【转】ACE编程小结的更多相关文章

  1. Linux多线程编程小结

     Linux多线程编程小结 前一段时间由于开题的事情一直耽搁了我搞Linux的进度,搞的我之前学的东西都遗忘了,非常烦躁的说,如今抽个时间把之前所学的做个小节.文章内容主要总结于<Linux程序 ...

  2. Windows Store 手势编程小结

    Windows Store 手势编程小结 最近完成了一个Windows Store上面的手势操作的页面.在这里总结了一下经验和心得,希望能和大家一起分享和讨论一下. 首先,要纠正一个误区,在Windo ...

  3. [2019BUAA软工助教]结对编程 - 小结

    [2019BUAA软工助教]结对编程 - 小结 一.评分规则 博客 博客共五十分 序号 要求 分值 1 在文章开头给出Github项目地址 1 2 在开始实现程序之前,在下述PSP表格记录下你估计将在 ...

  4. GDI+编程小结

    GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负 ...

  5. sql编程小结

    对照mysql5.1手册,对这几天学的sql编程进行小结,主要涉及触发器.存储过程.权限管理.主从分离等,权当抛砖引玉,高手请略过. 一.触发器 通俗的说就是在指定的数据表增删改的前或后触发执行特定的 ...

  6. Android JNI&NDK编程小结及建议

    前言 由于网上关于JNI/NDK相关的知识点介绍的比较零散而且不具备参照性,所以写了这篇JNI/NDK笔记,便于作为随时查阅的工具类型的文章,本文主要的介绍了在平时项目中常用的命令.JNI数据类型.签 ...

  7. IOCP编程小结(中)

    上一篇主要谈了一些基本理念,本篇将谈谈我个人总结的一些IOCP编程技巧. 网络游戏前端服务器的需求和设计 首先介绍一下这个服务器的技术背景.在分布式网络游戏服务器中,前端连接服务器是一种很常见的设计. ...

  8. C# 异步编程小结

    APM 异步编程模型,Asynchronous Programming Model EAP 基于事件的异步编程模式,Event-based Asynchronous Pattern TAP 基于任务的 ...

  9. iOS GCD 编程小结

    一.简单介绍 1.GCD简介? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD优势 GCD是苹果公司为多核的并行运算提出的 ...

随机推荐

  1. 聊聊并发(八)——Fork/Join框架介绍

      作者 方腾飞 发布于 2013年12月23日 | 被首富的“一个亿”刷屏?不如定个小目标,先把握住QCon上海的优惠吧!2 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件分享 ...

  2. Spring框架学习之第1节

    spring快速入门 ①   spring是什么? Struts是web框架(jsp/action/actionform) hibernate是orm框架(对象和关系映射框架),处于持久层 sprin ...

  3. VC高手们的博客

    http://www.cnblogs.com/killmyday/tag/Debug/ (关于符号调试等内容比较多)

  4. iOS xcode设置

    Xcode build search paths c/c++ 头文件引用问题include <> 引用编译器的类库路径下的头文件include “” 引用工程目录的相对路径的头文件 inc ...

  5. WAS集群服务的关闭与启动

    WAS集群服务的关闭与启动 欢迎转载,转载时请务必注明出处(http://blog.csdn.net/huangyanlong),否则作者保留追究版权法律责任. 表述有错误之处,请您留言或邮件(hyl ...

  6. Spring Boot Servlet

    上一篇我们对如何创建Controller 来响应JSON 以及如何显示数据到页面中,已经有了初步的了解. Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Serv ...

  7. 【流媒体】 Android 实时视频编码—H.264硬编码

    [流媒體] Android 实时视频编码—H.264硬编码 SkySeraph Apr 4th 2012 Email:skyseraph00@163.com 1  硬编码 & 软编码 硬编码: ...

  8. Codecademy For Python学习笔记

    一.Python Lists and Dictionaries: 1. 2.

  9. 开发板上修改时间方法date命令【转】

    转自:http://blog.chinaunix.net/uid-25906157-id-3138157.html 之前使用开发板时发现每次开机后,系统的时间都恢复到初始状态1970年. 一. 先说一 ...

  10. powerdesigner 15 如何导出sql schema

    PowerDesigner导出所有SQL脚本 操作:Database=>Generate Database PowerDesigner怎么导出建表sql脚本 1 按照数据库类型,切换数据库. D ...