多线程与串口通讯一问(50分)

  • 主题发起人 主题发起人 苏晴
  • 开始时间 开始时间

苏晴

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Delphi写一个控制电源的程序,大致的想法是:将命令分为两种,
一种是发出指令,不读取数据,另一种则是查询,读电压、电流值,
我觉得电压或电流值的显示应该是不断更新的,所以最好不断查询并返回数值,
为了实现这一点,我创建了一个线程来实现它。现在的问题是使用其他的命令时
可能会导致出错,因为他们都将数据写进缓冲区,会有冲突,如果我在执行其他
命令时将该线程挂起,执行完后再唤醒它,或许可以,不过好像太麻烦了些?
请各位大虾指点一下,如果是你,你怎么实现这个问题?
如果采用不同的缓冲区,应该怎样用?怎样为新的线程创建不同于主线程的读/写缓冲区?
这样在每次操作时是否还得挂起并唤醒线程?
 
每一种命令都设成不同的格式
比如取电源 A0 ******
电流 A1 ******
这样各自的线程只处理自己的命今
把自己的命今从缓冲区处理完后删除!
 
此类问题应该用线程同步可以保重数据缓冲区的一致
 
命令格式本来就不一样呀!
我担心的是来不及清除缓冲区,读入不该读的数据!
 
线程同步是什么意思?
能不能说清楚一点?
这样两个线程的读写缓冲区还一样吗?
或者是不是新的线程本来就有自己的缓冲区,和主线程的不一样?这我不太清楚!
(新线程是用来测量更新电压值的,主线程接受按钮命令输入。)
 
线程同步是不是指在主线程访问相同资源(串口)时,必须等查询线程结束后才能访问?
这样在主线程访问时还需不需要将查询线程挂起?
 
-》苏晴
线程同步,是指多个线程同时访问一个对象。如果你的程序写法准确的话,
多个线程会排成队列来访问这个对象的。所以不要刻意的去让某个线程挂起。当然
访问对象时要用同步函数Synchronize(不能带参数的过程)。
 
你说的缓冲区是哪里的缓冲区?
 
当然是串口的缓冲区。
gz
 
Synchronize()的问题是会让程序运行不够流畅,因为写数据时有一个延时的时间,所以我想用事件同步的方法,可是还没有成功。
还有,我是用等待串口事件的方法读取数据的,这样在只有一种数据时是没有问题的,如果有多种数据要读该怎么办?
因为对不同的数据处理方式是不一样的。
 
后退
顶部