VC这个该死的东西!!!
我想用VC写串口通信程序,其中有两个函数:sendstring,receivestring,端口是用CREATEFILE打开的,SENDSTRING是用WRITEFILE的,RECEIVESTRING是用WAITCOMMEVENT和WAITFORSINGLEOBJECT,CLEARCOMMERROR以及READFILE来完成的,然后我想再扩充一个函数:sendandreceive,这个函数是先发送再接收,语句我是这样写的:
sendandreceive(....)
{
sendsring(....);
Sleep(20);
receivestring(....);
}
然后就出问题了,如果我不加SLEEP,那我一次只能收到16个BYTE的数据(我的读写缓冲各开1024BYTE),如果加了倒是正常了,但是我在WAITFORSINGLEOBJECT中已经加了INFINITE等待了为什么还要加SLEEP??有什么办法能解决吗?
问题点数:30、回复次数:6Top
1 楼fz_zhou(vcfan)回复于 2001-07-04 23:07:38 得分 0
.你是用什么在进行通讯的?用了COM吗?
Top
2 楼neomeng(阿蒙)回复于 2001-07-04 23:36:47 得分 0
我怎么就没有出现这个问题,我也是,先发然后马上就读取的啊。Top
3 楼edd()回复于 2001-07-05 00:05:53 得分 0
我也做过串口程序,怎么没有这个问题?多半是你自己的程序有点问题。Top
4 楼FlyOverSea(雁渡寒潭)回复于 2001-07-05 20:36:33 得分 0
能把程序发给我吗?我很菜的:) 我的EMAIL是:flyoversea@kali.com.cnTop
5 楼alphapaopao(炮炮)回复于 2001-07-05 21:20:27 得分 5
那当然,那个洞洞没有CPU快
当然要SLEEP,不是VC的错Top
6 楼jslj(英名神武、德配天地)回复于 2001-07-06 01:18:39 得分 25
Sleep(20)应该是串口读取数据所消耗的时间,具体是这么估算的
time = Length*(Databits+StartBits+StopBits+Parity)/baud
例如,使用9600,8,e,2,数据长度为32,所耗时间为:
t = 32*(8+1+1+2)/9600
= 32*12/9600
= 0.04s
即需要40ms,Sleep(40);
WaitForSingleObject()在当接到第一个电信号时被触发,他等待的是起点,而不是终点.Top




