多线程数据采集的问题,大家讨论一下!(50分)

  • 主题发起人 Tiger_Dxj
  • 开始时间
T

Tiger_Dxj

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个直接读取I/O端口采集数据的程序,每秒最多采集10次,要求边采集边画图,我
原来用Timer定时采集然后画图,但是时间不够精确,现在我创建了两个线程,一个采集,
一个画图,在主线程的OnTimer事件中定时创建这两个线程,但是时间还是不准确啊,大家
帮忙看看我的设计是不是有问题:
我在采集和画图的线程中都是访问主线程开辟的内存区域,采集后写入改内存区,画图时
从该区取数据,主线程中每秒创建10次采集和画图的线程。这是设计是不是有问题?
是不是应该在子线程中使用定时器,开始采集就创建这两个线程,采集结束就关闭这两个
线程,而不是每次采集和画图都创建线程?
我现出的问题就是时间不准确,本来100秒采集1000个数据,但是现在采集1000个数据差
不多要110秒,而且每次时间都不太一样。
 
在多线程运行状态,使用GetTickCount()和timeGetTime()取得的时间会不真实,
因为OK可能会把CPU时间分给别的进程。
32位环境下,GetThreadTime()能提供详细的时间信息!
 
postmessage可以解决你问题吗?
我这么想的,数据采集和显示分开来,通过postmessage达到两者异步。。。
 
我做类似的程序采用的方法是创建线程后,使线程处于死循环,并等待信号,然后通过一个
timer发信号给线程,效果还可以
此外,我觉得你的问题不在于线程,你的线程虽然每十秒读一次数据,但不清楚你一次读数据
的时间有多长?如果超过十秒,那肯定是不行的,时间肯定不能准确了。你最好能检查一下
看一下读一次数据花费的时间,如果确实超过十秒,那可能需要更改采数据的方法了
 
看看《Delphi深度历险》中关于定时器的章节。
 
使用GetTickCount()+校正
同意楼上的,看看《Delphi深度历险》中关于定时器的章节。
 
接受答案了.
 
顶部