首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

小女子求救:打开文件并发送出去需要用时5分钟?该如何处理

2012-01-06 
小女子求救:打开文件并发送出去需要用时5分钟?打开文件FileNameApp.Path&\nnn.mcs OpenFileNameForInpu

小女子求救:打开文件并发送出去需要用时5分钟?
'打开文件
FileName   =   App.Path   &   "\nnn.mcs "
Open   FileName   For   Input   As   #1

Do   While   Not   EOF(1)     '循环至文件尾
        '读出一行数据放入one_line中
      Line   Input   #1,   one_line
            '得到一行数据,然后串口发送处理
      MSComm1.Output   =   one_line
      '延时10ms
      Sleep   (10)
      DoEvents
Loop

‘关闭文件
Close   #1


上面是我的一段打开文件并发送出去的程序,文件的大小为800kb,先不说按握手协议发,单就上面读一行马上发送出去,把这个文件发送出去就需要5分钟,我想问问高手有没有什么更快的方法,最好控制在1分钟左右,我想到延时不用,可是下位机收到的数据就会出错,我现在用的波特率是38.4kb/s,再高了下位机收到的数据也会出错,请高手指点一下,谢谢!!

[解决办法]
按照38.4Kbps的波特率,传送800KB的数据,至少得要166.67秒(约2.78分钟),1分钟是传不完的。
800(KByte) * 8(bit/Byte) / 38.4(Kbps) = 166.67
[解决办法]
Private Declare Function GetTickCount Lib "kernel32 " Alias "GetTickCount " () As Long
Dim tt As Long

FileName = App.Path & "\nnn.mcs "
Open FileName For Input As #1

Do While Not EOF(1) '循环至文件尾
'读出一行数据放入one_line中
Line Input #1, one_line
'得到一行数据,然后串口发送处理
MSComm1.Output = one_line
tt = GetTickCount() + 10
Do While MSComm1.OutBufferCount
DoEvents
If tt < GetTickCount() Then Exit Do
Loop
Loop

‘关闭文件
Close #1

[解决办法]
GetTickCount是一个api函数

Private Declare Function GetTickCount Lib "kernel32 " () As Long
'调用api实现延迟200ms
Private Function Delay(MSceond As Long)
Dim i As Long
If MSceond < 2 Then Exit Function
i = GetTickCount
Do While GetTickCount - i < MSceond
DoEvents
Loop
End Function

private sub form_load()
delay(200) '200即为参数200毫秒
end sub

热点排行