目前位置: VCer资源中心 >>> VCer开源 >>> 可重用类

[本帖已阅读7608次 分值285 回复16次] 张贴资源 发回信箱 控制面板

白乔原创:基于字符任务的串口通讯开发包CTaskedPort

提供者:bluejoe 张贴时间:2004-03-04 15:11:50.0 出处:vcer.net 作者:不祥

白乔原创:基于字符任务的串口通讯开发包CTaskedPort(2004-03-04 15:11:50.0)


白乔


 
级别: VCer师长
头衔: VCer创始人

经验: 21063
作品: 512
分会: 华北分会
注册: 2003-12-01 09:20:32.0
登录: 2008-10-09 08:39:35.0
工程源码[104,088字节] 下载3490
软件下载[104,088字节] 下载3490

实现方法

做过串口通讯的VCer肯定都熟悉MsComm控件和CodeProject上的CSerial。也许更多的程序员更愿意使用不需要控件的CSerial。但是不幸的是,CSerial类仅仅完成对底层串口通讯的封装,有时候并不如MsComm控件好用。

CSerialPort为bluejoe在CSerial基础上开发的类,支持开启事件监视线程。CTaskedPort为CSerialPort的派生类,它支持基于任务的事件处理。

用户发送一条命令(如:AT<cr>),可能就需要等待串口的回应(如:OK)才决定做下一步,这个AT命令其实就是一项任务(CPortTask),任务的结束一般需要用户指定关键词(如:OK或者ERROR)。CTaskedPort自动将命令和关键词列表封装成一个任务。

本包主要包括以下几个类:

CSerialPort:类似于CSerial的类,类声明如下:

CPortTask:完成对串口任务的封装,类声明如下:

CTaskedPort:支持任务的串口操作类,类声明如下:

CTaskedPort支持的任务包括后台任务和前台任务,它同时只允许一个任务被激活:如果存在前台任务,后台任务自动隐藏;新前台任务的载入,会自动覆盖旧的任务。

后台任务一直存在,用以监视用户指定的串口事件,并构造字符缓冲区。当用户调用Request函数时,CTaskedPort自动创建一个前台任务,并disable后台监视任务。前台任务一直等待,直到关键字的出现(或者超时)。这个等待过程表现出来的是一个同步接口,用户只需要等待Request函数结束即可。至于用户可能需要在等待过程中做一些其它的操作,如:显示进度条,这就需要用到CWaiting类。

CWaiting:CWaiting类用以指定等待过程中的动作,系统中已提供了3种CWaiting类:CDumbWaiting(啥都不干)、CProgressWaiting(显示进度条)和CNewProgressWaiting(创建一个新的进度窗口并显示进度)。CNewProgressWaiting继承于CProgressWaiting,它们之间的区别在于CProgressWaiting可以依附于任何一个窗口(如:当前的主窗口),而CNewProgressWaiting创建一个新的窗口。

创建一个CWaiting对象,将它作为参数,传入Request函数,就这么简单,你的程序就完成了同步等待和异步显示。

此外,Request允许用户指定等待时限。在等待超时时,是否直接结束等待,还是继续重试,还是弹出提示框询问用户,这些动作都可以通过Request的参数指定。

CTaskedPort还提供了丰富的接口,用户可以通过继承,来实现更多的功能。

本包已经成功应用到bluejoe的手机串口通讯软件,目前还没有发现什么问题。希望各位使用探讨,并希望各位提出修改意见。

所附源码还包括其它的工具类,包括CUtil、CRichException、CWin32Exception等,希望能与大家一块共享。

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/1046574661233.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

1082687209616[385,308字节]

得意,我用他的代码;

自豪,他用我的代码!

[回复该贴] [加入个人书签]
[投票结果]

A: 评分 10 94% (18 票)
B: 评分 5 5% (1 票)
C: 评分 0 0% (0 票)
D: 评分 -5 0% (0 票)
E: 评分 -10 0% (0 票)

 


re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

下载下来看看

swg0803 于 2008-10-05 10:25:49.0 编辑 [回复该贴]

re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

...正在学习中

chenzhihua 于 2008-07-23 17:01:41.0 编辑 [回复该贴]

re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

...学习中。谢谢共享

loki110 于 2008-02-28 14:01:19.0 编辑 [回复该贴]

re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

...编译了运行,出现一个空白对话框。。啥意思。。

hellobaby 于 2007-12-19 11:00:57.0 编辑 [回复该贴]

re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

还没有深入到串口编程,但是好文章还是要顶一下!

herowuking 于 2007-12-14 09:38:35.0 编辑 [回复该贴]

re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

...我一直想做串口通信方面的软件,但却无重下手,现看到白先生写的代码似乎明白了;当然,具体应用肯定各个不同,尚待在实践中检验,不过非常感谢!!

支持!

iamVCer0 于 2007-10-30 07:08:54.0 编辑 [回复该贴]

re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

...Thanks for sharing!

depv 于 2007-07-06 16:54:05.0 编辑 [回复该贴]

re:re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

...路过..刚开始学vc ,看起来像天书.............

funkri 于 2007-09-11 11:41:11.0 编辑 [回复该贴]

re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

...支持以下!!!!

ohahay 于 2007-05-31 10:55:50.0 编辑 [回复该贴]

re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

你好,有程序软件吗?我想要一份,我的邮箱:cailai@163.com谢谢!

cailai 于 2007-05-31 10:04:24.0 编辑 [回复该贴]

re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

白乔:你好!我用过CSeail,比较稳定。

用CSerilPort出现了问题以下是Winrar解压缩时的报错信息:

F:\Documents Center\VisualC++6\Resource\1046574698687\1046574698687.rar: TaskedPortDemo\Win32Exception.cpp CRC 失败。文件被破坏 ------------------------------------------

Win32Exception.cpp 没有,工程可以打开,请问如何使用?有类,没有例子。我这样用出现了错误: SerialPort.Open(1); SerialPort.SetDCB(2400); DWORD nBytesSent = SerialPort.Write("Test");

不能发送,运行报错,在以下语句处 if(!WriteFile(m_hHandle, pBuffer, nLength, &nLength, &m_osWrite)) { DWORD nError = ::GetLastError(); //断点,运行到这里nError =998 if(nError == ERROR_IO_PENDING)

请指教,能否给一个事件驱动的例子

liujian 于 2006-02-22 11:21:03.0 编辑 [回复该贴]

re:re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

非常抱歉,原来的zip格式看来是真的有问题:)使用WinRar是不是就正常了?现在zip文件已采用新的格式,请重新下载试用:)

bluejoe 于 2007-01-22 09:43:40.0 编辑 [回复该贴]

re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort
非常佩服写出这么好的类,我对CSerialPort非常感兴趣,但下了后解压缩时报错,请更正

liujian 于 2006-02-21 16:52:45.0 编辑 [回复该贴]

re:re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort
应该是可以下载的吧?上午发给你的cpp文件替换了么?

bluejoe 于 2006-03-02 16:01:08.0 编辑 [回复该贴]

re:re:re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

...白乔,下载后编译时个空白对话框,是什么原因?

xiaoyi157 于 2008-02-15 22:03:55.0 编辑 [回复该贴]

re:re:re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort

...xiexie le!

 

lightpurple 于 2007-12-10 09:09:07.0 编辑 [回复该贴]

re:re:re:白乔原创:基于字符任务的串口通讯开发包CTaskedPort
非常感谢共享,以后要好好向你学习学习!

guenli 于 2007-01-17 23:57:55.0 编辑 [回复该贴]