请把1改成:Public Sub TermIrq(ByVal Port As Long)*PComm.dll* <1>
Dim LenT As Long
Dim ch As Long
Dim i As Integer
InPutStr = ""
Do
LenT = sio_iqueue(Port)
If LenT Then
ch = sio_getch(Port)
InPutStr = InPutStr & Chr(ch)
If ch = 33 Then
XY_JX (InPutStr)
InPutStr = ""
Exit Sub
End If
End If
Loop Until LenT = 0
另外,PComm.Dll的某个版本支持中断上是有问题的(记不得了)
在做多线程时使用Pcomm.dll不如MSComm.ocx,如果数据量较大时,
速度明显降低
Dim LenT As Long
Dim ch As Long
Dim i As Integer
InPutStr = ""
Do
LenT = sio_iqueue(Port)
If LenT Then
ch = sio_getch(Port)
InPutStr = InPutStr & Chr(ch)
If ch = 33 Then
XY_JX (InPutStr)
InPutStr = ""
Exit Sub
End If
End If
Loop Until LenT = 0
另外,PComm.Dll的某个版本支持中断上是有问题的(记不得了)
在做多线程时使用Pcomm.dll不如MSComm.ocx,如果数据量较大时,
速度明显降低
的结果为-4。(实际上是没有数据了)
我的程序中 1 没有什么问题,我的问题是从 TermIrq 过程中收到数据后,交给 XY-JX
函数处理后在利用事件触发方式通知主程序。但只要程序执行了 TermIrq 过程则 4 不会被触发。但只要不通过 TermIrq 过程比如通过 2,3 则 4 就会被触发。
1)如果你把 TermIRQ 作为PComm中断回调函数的话,可能会有问题,
在PComm的帮助文件中有说明,不要在中断回调函数中读数据。应该
发送消息到主程序来读数据。否则可能会出错。
2) LenT 变量在进入循环前被赋值。在循环中没有改变他的地方,如果
Ch=33的条件不成立(在波特率较高,没有校验,而且串口线较长的
情况下,很容易出现错误的数据)程序是一个死循环。2,3,4根本
不会被执行。
Public Sub TermIrq(ByVal Port As Long)*PComm.dll* <1>
Dim LenT As Long
if lent then mcommclass.send
end sub
但主程序依旧无反映