文/渔樵阿飞
CnComm是llbird开发的WINDOWS/WINCE 多线程串口通讯开源库,使用C++ (ANSI/UNICODE)开发,支持的平台包括WINDOWS(WIN98/NT/2000/XP/2003/Vista),WINCE 5.0 模拟器, Pocket PC 2003 模拟器,在BC++ 5(free tool); C++ BUILDER 4, 5, 6, X;EVC 4(sp4); G++ 3, 4; Intel C++ 7, 8, 9; VC++ 6(sp6), .NET, 2003, 2005等编译工具下编译测试通过,代码采用传统C++的继承机制, 采用VC命名风格(匈牙利),提供同步IO并发访问的支持,内存管理采用内存池技术,提供对于C++异常的支持,对于串口库的扩展,不推荐直接在本代码上修改, 应通过C++继承扩展机制扩展本代码。
CnComm多线程串口类的类结构如下,CnComm是定义的多线程串口类,CnComm::BlockBuffer类是根据通讯特点开发的缓冲区类,单向链表内存块,提供一些扩展以支持和API挂接,CnComm::InnerLock是自动锁类,用于函数内部,利用对象的生命周期完成锁定及解锁,CnComm::MfcException是一个异常处理类,用于MFC的异常处理,CnComm::BlockBuffer::Block是定义的缓冲区内存块,CnComm::BlockBuffer::InnerLock是定义的自动锁类,CnComm::BlockBuffer::Iterator是定义的缓冲区迭代器。在这个多线程的串口类中,定义了多个嵌套类。
现代C++使用RAII的机制,使用类来管理资源,在构造函数中分配资源,在析构函数中释放资源,这种方法管理资源基本上不会遇到什么问题,然而,动态内存的管理,一直就是一个烫手的山芋, C/C++提供了多种方式,C中的malloc/free,C++中的new/delete以及new[]/delete[],全局的::operator new和::operator delete,C+