一个串口通讯DLL,如何在一个函数中将发送指令和输出返回结果?

kingbenz 2013-06-03 12:37:20
通讯组件使用spcomm,在一个函数中发送指令,发送后函数就结束了,这时结果还没有返回,需在消息处理事件中才得到返回结果,如何将发送指令和返回结果整到一个函数中?
...全文
609 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
JohnYale 2013-06-21
  • 打赏
  • 举报
回复
可能子线程已经收到串口消息,只是主线程在Wait时被阻塞,所以你觉得没收到消息
kingbenz 2013-06-19
  • 打赏
  • 举报
回复
引用 7 楼 JohnYale 的回复:
[quote=引用 6 楼 kingbenz 的回复:] 我是在函数中用一个子线程向串口发送和接收,主线程使用waitforsingleobject(thread.handle, 2000),但是主线程一调用waitforsingleobject,子线程也接收不到串口消息了,waitforsingleobject超时后再收到消息,各位是用什么方法等待?
主线程使用waitforsingleobject(thread.handle, 2000), thread.handle是谁的handle? [/quote] 当然是子线程的handle
JohnYale 2013-06-05
  • 打赏
  • 举报
回复
引用 6 楼 kingbenz 的回复:
我是在函数中用一个子线程向串口发送和接收,主线程使用waitforsingleobject(thread.handle, 2000),但是主线程一调用waitforsingleobject,子线程也接收不到串口消息了,waitforsingleobject超时后再收到消息,各位是用什么方法等待?
主线程使用waitforsingleobject(thread.handle, 2000), thread.handle是谁的handle?
kingbenz 2013-06-03
  • 打赏
  • 举报
回复
我是在函数中用一个子线程向串口发送和接收,主线程使用waitforsingleobject(thread.handle, 2000),但是主线程一调用waitforsingleobject,子线程也接收不到串口消息了,waitforsingleobject超时后再收到消息,各位是用什么方法等待?
gencheng 2013-06-03
  • 打赏
  • 举报
回复
查询输入缓冲区的字节数(InputCount),如果大于0就读取。当然这个通讯过程最封装到一个线程中去比较好。
bdmh 2013-06-03
  • 打赏
  • 举报
回复
可以通过握手,发过去,等待回来,回来的信息中可以附带你要的数据
xhz8000 2013-06-03
  • 打赏
  • 举报
回复
觉得这种通讯还是回调过程好过!
看那山瞧那水 2013-06-03
  • 打赏
  • 举报
回复
不用事件接收,手工接收吧。 一个函数大概如下形式: Write(); //写串口 Sleep(); //等待 Read(); //读串口 这儿的等待,如果串口设备响应时间比较固定,可以用Sleep()固定延时一个时间,如果是不定长的响应时间,可以检查接收到的数据长度,接收数据长度够了就返回
babydog01 2013-06-03
  • 打赏
  • 举报
回复
你这个函数也必须等待,在可SPCOMM的数据接收事件中更换函数的变量,此时函数返回数据,或等某个时间后返回错误或其它值。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧