多检查一下程序吧,这个类用了很久了,酒精考验了,类似Read、Write之类的就不用问了,肯定没问题的。
抱歉,那段代码是支持WINCE,他的代码是只支持WINDOWS的@bird
例子是有BUG的,必须用1.51的版本,或者按照本文的进行修正。
当中间包含有0x00 的数据时不可以使用ReadString
应使用Read
C++写的类,当然性能是正常的。俺这么多年从来就没有听说性能问题。
什么叫慢?你的代码片段不足以让人了解你要做什么,如何测试,DLL和主模块如何搭配,业务的东西你要自己做的,我不对业务做咨询。
你如果能够准确明了的描述问题和想法,我有时间还是会做解答,但不承诺。
只对CnComm本身问题做咨询。

注意超时控制,如果你想要接收到数据再返回,
要用精确控制。
比如14个字节的应答包

void OnReceive()
{
for (1..14)
Read(&c, 1);//一个字节一个字节读

或者Read(&c, 14);//直接控制恰当的字节数,而不是一味的用1024
或则Read函数会一直等到1024个字节,但实际上它等不到,因为根本不可能应答1024字节,它就会等个几百毫秒超时了在返回,可能这就是你说的慢,不知道我的理解真不正确?

另外你的模式有问题,
while(1)
{
Sleep(1); //暂停1毫秒
if(intReceived==1 && (BYTE)buffReceived[0]== 0x01)
{
return true;
}
}
不应该这样用你可以用通知方式会更理想,循环很浪费CPU,直接WaitEvent更好一些
}


Comm_.Write(buffer);
不返回发送数量是因为重叠IO的作用。
系统将在后台帮你把数据发送出去,由于串口是低速设备,如果你要等待返回发送数量将浪费系统资源,所以函数直接返回,以便你继续操作,这样并行操作,提高系统利用率
memcpy(NewBlock(dwSize)->P_, ((LPBYTE)lpBuf) + dwCopy, dwTemp);//

这里忘记把const属性去掉
这个不知道,那还是要屏蔽的,这个大家可以自行改一下,不屏蔽会造成后面的语句失效。

if(!CN_ASSERT(::SetupComm(hComm_, 4096, 4096)))//! 配置端口发送接收队列大小, 读4096字节, 写4096字节, 阻塞I/O模式发送队列无意义
return false;

改成
#ifdef CN_COMM_FOR_CE
::SetupComm(hComm_, 4096, 4096);
#else
if(!CN_ASSERT(::SetupComm(hComm_, 4096, 4096)))//! 配置端口发送接收队列大小, 读4096字节, 写4096字节, 阻塞I/O模式发送队列无意义
return false;

#endif
为什么要有年龄限制,高手和年龄有何关系?不解$%#%
不过我在年龄范围内,但不在北京,就不知道什么才算是高手,传说中的HighHand.
re: 自己实现的memcpy llbird 2009-04-18 20:07
你这好像要靠编译器优化,并没有显示优化,不能说没有更快,
最简单拿你那个复制5个字节的例子,就没必要函数调用,可以内联展开,并且把循环忽略掉
跟贴的小鸟挺多的,呵呵。
C++的string就不是一个类型,是个纳入的C++标准扩展类而已,并没有进入核心类型。

另外string是一个模板的实现(basic_string<char>),理论上你可以静态重载模板参数来使用任何字符集

UNICODE: wstring basic_string<wchar_t>;

字符编码当然是个标准,并不存在平台的不同,否则就不是标准。
至于高低字节顺序的问题,那应该有程序转载文件是做转换,不是说文件内编码顺序不一样
<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

导航

统计

常用链接

留言簿(8)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜