ACE框架复用的一些小问题

    本人初学ACE(ACE是什么在这里就不介绍了,感兴趣的朋友要自己看一下了),在编译和使用中遇到了些问题,经过努力和其他朋友的帮忙,基本上都能解决,下面就把这些问题及其解决方法总结一下,供大家交流。接下来的实践中可能还会有问题,我会继续贴到这里,请大家批评指正。
    说明一下,本人的编程环境是XP+VS2005。ACE是从官方网站上下载的新版本(2006.8)。
    1.如果在用ACE的Reactor框架写网络服务端程序,编译时遇到下面这样的错误:“undefined class 'ACE_Null_Mutex'”就把#include "ace/Synch.h"加在你的头文件中。其实在编译ACE程序中经常会出现这种情况,可以根据实际问题找一找应该加载哪个头文件。
    2.在编写网络程序(socks)时,还是要进行初始化,就是要用WSAStartup()API来装入ws2_32.dll这个库,如果没有初始化,使用socks函数时就会出现未初始化的错误提示信息。但是在用Reactor和Event_handle来编写程序时就不用初化,具体什么原因还不太清楚。
    3.如果继承ACE_TASK_BASE类来建立线程,最好声明对象指针,以->activate()的格式来启动线程,否则有可能在运行过程中出现错误,因为线程主服务函数svc()是虚函数,直接用对象.activate()的格式调用就用不到它的动态性,所以在运行中可能就会出现错误。
    4.如果在编写WINDOWS窗口程序时,使用TASK建立线程,可能会遇到这样的问题:编译和连接都没什么问题,但程序在运行时就会挂起。通过分析和试验,我发现在CONSOLE程序下,就没问题。如果在窗口(GUI)下要使用TASK对象,程序就要以main作为入口点。具体原因没有进行深入分析,请高手指教其中的原理。
    具体做法:首先,要把WinMain()函数去掉,改为int main(int char* argv[])。如果窗口程序中要用到程序的实例句柄(hInstance),可以用GetModuleHandle()API来取得。其次,要在项目的“连接”属性处的“高级”上,修改程序入口点标号为main才可以连接成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值