C++ Builder 中的定时器问题

dddsmile 2008-08-05 03:27:22
在C++builder中用Timer控件定时,1s向仪表送一个命令要求返回当前仪表显示值,
但是观察读取来的数据,不能保证刚好每一秒一个数据,有时同一秒有两条数据,
有时又空掉一秒。
在一台电脑只运行着一个程序时不是太明显,当同时另一个买来的实时数据采集绘图程序时,
这个缺陷就变得很明显。
这是否和Timer的优先级比较低,有关系呢。
有没有别的实现定时器的方法?
谢谢了!

...全文
332 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Allen841125 2008-08-27
  • 打赏
  • 举报
回复
再想一想!不大好办!
dddsmile 2008-08-06
  • 打赏
  • 举报
回复
那位好心人,有数据采集线程的程序,发给我一份,谢谢了。
djlsmile@hotmail.com
dddsmile 2008-08-06
  • 打赏
  • 举报
回复
我也想用线程的,主要是本人太菜,还不知道如何写线程,一直觉得线程太复杂,
hemiya 2008-08-06
  • 打赏
  • 举报
回复
sleep只是sleep相关的线程,别的不管。
lz要是采集数据还不如整个线程,专门用于采集数据。

[Quote=引用 6 楼 dddsmile 的回复:]
谢谢大家了,准备试试多媒体定时器
顺便在问一个问题,好像有点不道德啊。
这个程序用于控制几个仪表及数据采集,
有一个电子天平,向它发送命令之后,很长时间才能稳定,因此需要延时。
我现在用的是Sleep(),
刚才在网上看Sleep()用于长时间延时(15s/10s/5s)的时候,会像死机一样,无法响应其他消息,
但是从我的程序的运行结果来看,在一个子程序延时等待的时候,定时器仍然能够间隔一秒采集数据,
不知是我理…
[/Quote]
我来看看CB 2008-08-06
  • 打赏
  • 举报
回复
这个很难。。。。。。。。。。
dddsmile 2008-08-06
  • 打赏
  • 举报
回复
谢谢大家了,准备试试多媒体定时器
顺便在问一个问题,好像有点不道德啊。
这个程序用于控制几个仪表及数据采集,
有一个电子天平,向它发送命令之后,很长时间才能稳定,因此需要延时。
我现在用的是Sleep(),
刚才在网上看Sleep()用于长时间延时(15s/10s/5s)的时候,会像死机一样,无法响应其他消息,
但是从我的程序的运行结果来看,在一个子程序延时等待的时候,定时器仍然能够间隔一秒采集数据,
不知是我理解错了,还是怎么的?
我有没有必要将Sleep()换成其他的延时方法呢?
yuanreid 2008-08-05
  • 打赏
  • 举报
回复
需要使用多媒体定时器,普通定时消息是低优先级的,无法保证准确。
leeicescri 2008-08-05
  • 打赏
  • 举报
回复
Timer优先级很低的,比如你按住最大化、最小化按钮不放,你会发现根本就没有Timer事件响应了。
用什么定时器得看你自己的精度要求了。
看看这篇文章吧:
http://2363155.blog2.cnool.net/Article/2008/03/27/244760.html
sunyuchuan86 2008-08-05
  • 打赏
  • 举报
回复
建议用线程完成,这样也许更精确点。
Stanny 2008-08-05
  • 打赏
  • 举报
回复
间隔设置小一些,不要刚好1s,可以1s里面刷2-3次试试看
unsignedme 2008-08-05
  • 打赏
  • 举报
回复
使用多媒体字时器

MMSytem API timeSetEvent/timeKillEvent

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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