在开发串行通讯的Delphi程序时,遇到如下问题!
在Win98下用API函数编写串行通讯函数,对此通讯函数的要求是做同步处理
即在用函数API ReadFile进行读串口操作时,系统处于阻塞状态,
等待函数返回结果,并不象通讯控件所用的多线程处理!
例如:ReadFile(hcom,read_buffer,cbrNum,readnumber,nil)
再用这个函数时,用一个While(ture)循环来判断一个时间标志,只要时间
标志没有超出要求,就循环调用ReadFilehcom,read_buffer,cbrNum,readnumber,nil)
来读取串口数据
ReadFile这个函数在98下可以返回成功!
但在2000下通用的处理过程,却返回失败
望各位高手帮助解决!
在Win98下用API函数编写串行通讯函数,对此通讯函数的要求是做同步处理
即在用函数API ReadFile进行读串口操作时,系统处于阻塞状态,
等待函数返回结果,并不象通讯控件所用的多线程处理!
例如:ReadFile(hcom,read_buffer,cbrNum,readnumber,nil)
再用这个函数时,用一个While(ture)循环来判断一个时间标志,只要时间
标志没有超出要求,就循环调用ReadFilehcom,read_buffer,cbrNum,readnumber,nil)
来读取串口数据
ReadFile这个函数在98下可以返回成功!
但在2000下通用的处理过程,却返回失败
望各位高手帮助解决!
解决方案 »
- QuotedStr使用的问题
- 100分恳请KSDev ThemeEngine 3.6
- 主窗体内创建子窗体,老出现这个错,不知什么原因,帮忙看看!
- 我想把多个Clientdataset.data(olevariant类型)转成一个xml包,再在后端又把xml包拆分成多个olevariant,应该怎样做呢?
- 关于线程的挂起与唤醒????急!!请各位指教!!!
- 适时捕捉F1键,大家一起来探讨!看谁的点子very good!!
- 怎样才能在DELPHI里直接把一个文件COPY到另一个目录?
- 如何在DBgird中显示出标准数字格式的数字
- 提示“无法识别的OLECONTROL对象”是什么原因造成的?
- 请问大家数据库实际开发
- C/S结构到B/S结构的转化
- 如何在程序里增减Dbcombobox里面的items
搜索 串口通讯
就可以找到一个很好的网站。
if ( ! ReadFile(FhCom,RDBuffer,bytes, &bytesrw,&rOverLapped) ) {
if (GetLastError() == ERROR_IO_PENDING) {
// We have to wait for read to complete.
// This function will timeout according to the
// CommTimeOuts.ReadTotalTimeoutConstant variable
// Every time it times out, check for port errors
while( !GetOverlappedResult(FhCom,&rOverLapped, &bytesrw,TRUE ) ) {
if ( GetLastError() != ERROR_IO_INCOMPLETE ) {
// an error occurred, try to recover
ResetBytes();
if ( FOnReceiveEvent != NULL )
FOnReceiveEvent( RDBuffer, bytesrw );
return bytesrw;
}
}
ResetBytes();
}