cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

请教个多线程和数据安全队列的问题

[复制链接]
发表于 2009-3-4 20:53:40 | 显示全部楼层 |阅读模式
请教下诸位个多线程和数据安全队列的问题,我在主线程中创建了两个子线程分别用于数据的采集和分析,同时在主线程中创建了一个安全队列,采集线程采集的数据写入安全队列,对安全队列也指定了它的回调函数,我想把他的回调函数放到数据处理线程中来执行,该怎么办?
 楼主| 发表于 2009-3-4 20:55:19 | 显示全部楼层
因为创建子线程时已经指定了子线程要处理的函数,创建安全队列时也指定了他的函数,这两个函数的定义是不同的,我就不知道应该如何办了?
发表于 2009-3-5 12:28:27 | 显示全部楼层
多线程采集的合理做法是在次线程中采集,而把显示、处理等放在主线程中进行!
因为没有看到你的源码,不知道你是如何处理的,也难以具体说明。因为毕竟每个程序员都有自己的编程习惯。
 楼主| 发表于 2009-3-6 09:05:44 | 显示全部楼层
3# netcreature 版主我的意思不是数据怎么显示和处理的问题,而是线程队列的问题。就是你在两个线程之间创建的安全队列不是已经指定了队列的回调函数了吗?而你创建子线程时也指定了子线程要处理的函数。我是想问如何把队列的函数放到子线程中去执行?请版主帮忙哈
发表于 2009-3-6 09:52:20 | 显示全部楼层
队列的回调函数?!——什么意思?
int CmtNewTSQ (int number_ofItems, int itemSize, unsigned int options, int *queueHandle);
queueHandle是线程安全队列的句柄,两个线程也就是通过它来传递安全变量的。
(如果你能将源码传上来,也许我理解起来比较容易一点!)
 楼主| 发表于 2009-3-6 18:32:40 | 显示全部楼层
版主,不是源码的问题哈 源码还没写出来呢 我不知道怎么设计了 呵呵 队列的回调函数就是你通过 int CmtInstallTSQCallback (int queueHandle, unsigned int event, int eventThresholdValue, TSQCallbackPtr callbackFunction, void *callbackData, unsigned int callbackThreadID, int *callbackID)指定的函数(callbackFunction),称为函数一吧。而创建线程时用的是这个函数:int CmtScheduleThreadPoolFunction (int poolHandle, ThreadFunctionPtr threadFunction, void *threadFunctionData, int *threadFunctionID)他指定的回调函数是 threadFunction,而上述两个函数的原型是不同的。我就想把函数 一放到我创建的子线程中来执行,该怎么办?版主
发表于 2009-3-9 09:21:34 | 显示全部楼层
貌似你的理解有点偏差:线程池的用法只是在大量不确定性数据操作时采用。就你的问题,不需要这么复杂!
 楼主| 发表于 2009-3-9 19:01:13 | 显示全部楼层
发表于 2009-5-19 16:01:48 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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