一个串口通讯DLL,如何在一个函数中将发送指令和输出返回结果? 通讯组件使用spcomm,在一个函数中发送指令,发送后函数就结束了,这时结果还没有返回,需在消息处理事件中才得到返回结果,如何将发送指令和返回结果整到一个函数中? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你这个函数也必须等待,在可SPCOMM的数据接收事件中更换函数的变量,此时函数返回数据,或等某个时间后返回错误或其它值。 不用事件接收,手工接收吧。一个函数大概如下形式:Write(); //写串口Sleep(); //等待Read(); //读串口这儿的等待,如果串口设备响应时间比较固定,可以用Sleep()固定延时一个时间,如果是不定长的响应时间,可以检查接收到的数据长度,接收数据长度够了就返回 查询输入缓冲区的字节数(InputCount),如果大于0就读取。当然这个通讯过程最封装到一个线程中去比较好。 我是在函数中用一个子线程向串口发送和接收,主线程使用waitforsingleobject(thread.handle, 2000),但是主线程一调用waitforsingleobject,子线程也接收不到串口消息了,waitforsingleobject超时后再收到消息,各位是用什么方法等待? 主线程使用waitforsingleobject(thread.handle, 2000), thread.handle是谁的handle? 主线程使用waitforsingleobject(thread.handle, 2000), thread.handle是谁的handle?当然是子线程的handle 可能子线程已经收到串口消息,只是主线程在Wait时被阻塞,所以你觉得没收到消息 如果取消dbgrideh没有记录时的空行? 这样写问题在哪? 控件太多怎么办?急啊 文件操作问题 如何实时判断窗体已经移动了? 数据库操作能否存入图片? 怎样在界面中显示数据库中的图象啊? 窗体最小化时所需要的...... 关于数据库的问题 怎样从EXCEL中把一个字段的数据倒入一个memo里? delphi 发展前景如何 win7如何使用FindWindow和FindWindowEx查找窗口句丙?
Sleep(); //等待
Read(); //读串口这儿的等待,如果串口设备响应时间比较固定,可以用Sleep()固定延时一个时间,如果是不定长的响应时间,可以检查接收到的数据长度,接收数据长度够了就返回
当然是子线程的handle