注册 登录
编程论坛 VC++/MFC

利用多线程进行数据采集?

喜鹊王子 发布于 2013-03-02 09:45, 642 次点击
对于大量数据的采集,要实现数据采集、显示、绘制曲线;
A. 如果采用单线程的话,数据采集、显示、绘制曲线依次执行,即采集一个数据后便显示和绘图;
B. 如果采用多线程的话,微观上来讲,一个时刻只能有一个线程在运行,假设采用两个线程:(1)数据采集线程和(2)显示、绘图线程,在数据采集线程中sleep()后,执行显示、绘图线程,岂不是延长了整个程序的执行时间,因为多了sleep()这个时间,如何讲提高了效率呢。

是不是我的理解有错误呢?对于这种大量数据采集的系统,要实现上述功能,如果要提高效率,该如何利用多线程?
2 回复
#2
yuccn2013-03-02 11:55
一般来说 对于采点和绘图,都分成多个线程来工作的了,主要的一个原因,逻辑上独立,还有就是 工作(采点)线程不会影响ui(绘图)线程,这样就不会卡住界面


#3
玩出来的代码2013-03-04 17:27
最好的是分开多线程处理,之一就如楼上说的不会因为采集缓慢或卡住而影响绘图,或者因为绘图过慢而影响采集造成丢失数据。
在单核上一个时刻只能有一个线程在运行,不过CPU在线程上的切换开销是很小的。而多核计算机就不存在这个问题了。
若在采集的过程中可能有大量的空循环可用sleep(0)试下。大量的空循环也是很费CPU的。
这种问题最主要的是保住来源的正确性。若才数据源处就有数据丢失,那后续的处理就毫无意义了。
1