cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 2652|回复: 10

基于多线程的数据采集的问题!!!!!!

[复制链接]
发表于 2011-3-21 10:04:25 | 显示全部楼层 |阅读模式
本帖最后由 kobymeers 于 2011-3-21 10:09 编辑

我的问题是这样的,希望大虾指点!:        我要 做一个基于多线程的四路并行数据采集并处理和显示程序,看了一些多线程的资料,三种多线程的数据保护方法中基本确定用线程安全队列的方法,在多线程的两种机制的选择中我却犯了难。CVI提供了两种多线程的机制:线程池和异步定时器。线程池可以并行执行多个回调函数但是不能循环调用,异步定时器可以循环调用一个程序里的所有给它的回调函数,但看书上说的感觉异步定时器不能并行执行多个函数。
         问题来了,我原来做这个四路并行数据采集并处理和显示程序是用的CVI自带的普通的同步定时器就是那个TIMER控件,就是要四路并行且每隔一段时间采集一次数据,然后处理和显示数据,采集处理显示都在一个TIMER里,所以出现了数据采集延迟的现象,现在想用多线程解决这个问题,如上所述:CVI提供的两种多线程的机制中我该选哪个呢?
        ****线程池可以并行执行多个回调函数但是不能循环调用,异步定时器可以循环调用一个程序里的所有给它的回调函数,但看书上说的感觉异步定时器不能并行执行多个函数。     貌似我应该用异步定时器,但如何能用它实现并行执行四路的数据采集呢?!请高人指点~~~
        NewAsyncTimer (((double)g_msDelay) / 1000.0, count,
                                   enabled, MyTimerCallback, NULL);        //这是建立异步定时器的函数
         我想能不能在一个程序里建立4个AsyncTimer呢?没用过,不知道啊。
发表于 2011-3-22 09:54:29 | 显示全部楼层
咱俩是同一个问题,我是2个串口同时执行,也没有头绪,希望有高人指点下
发表于 2011-3-22 11:24:32 | 显示全部楼层
怎么没人顶呢
发表于 2011-3-22 15:52:12 | 显示全部楼层
 楼主| 发表于 2011-3-23 10:57:30 | 显示全部楼层
发表于 2011-3-23 15:14:40 | 显示全部楼层
二楼的相对容易,串口慢,你完全可以顺序执行。再各定义一个串口事件。
发表于 2011-3-23 15:15:35 | 显示全部楼层
异步定时器应该可以多个。因为它有一个让所有定时器废弃的函数,如果不是可以同时执行,它这个函数就没有存在的必要性,你需要去编一个简单程序尝试一下。
 楼主| 发表于 2011-3-23 15:40:11 | 显示全部楼层
回复 胆生毛 的帖子

我试了,如果采用线程池,有个一个主线程和四个数据采集的次线程,在资源管理器里可以看出来但是用异步定时器的函数创建四个异步定时器,在资源管理器里还是只有2个线程啊。。。。所以我觉得CVI里只会调用一个异步定时器去执行回调
发表于 2011-3-23 15:54:02 | 显示全部楼层
我是用一个主线程,两个次线程
主线程管理这两个次线程,但是这两个次线程执行中还不是同步的?
这是怎么回事?
发表于 2011-3-23 15:56:50 | 显示全部楼层
 楼主| 发表于 2011-3-23 15:57:22 | 显示全部楼层
回复 goldramer 的帖子

想让两个次线程同步最好还是用线程池的方式做
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-4 20:09 , Processed in 0.368769 second(s), 6 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表