|
现在做串口采集,用多线程,出现了个问题cpu占用率有点太高了,在我一个双核的机器上占30%,到了一低配的赛扬单核上占50%多,简直没法用了;
简单介绍:我现在是每一个串口连接着同一种类型的设备,每个设备连接的采集点的相关数据、参数都保存在一个数据表中。工作时对于每一个采集点通过串口向设备发一个命令后,在sleep(40)后,接着在读设备返回来的数据
我的线程函数结构是这个样子的
BOOL lap;
UINT myproc(.....)
{
对主线程传递过来的参数进行处理,获得存放这个串口的采集点参数的数据表
跟据设备类型加载相应的动态库。
while(lap)
{
sleep(10);
查数据库这个串口的所有变量
记录集指针移到数据表中第一个采集点的记录
while(数据记录没到末尾)
{
通过数据库得到这个采集点的相关参数后调用动态库的函数进行采集;
对采集的数据进行修正、报警判断,然后将相关内容写入数据库。
(如果报警条件达到就报警)
移到吓一跳记录。
}
}
lap为false,释放动态库,结束线程;
}
每一个串口创建一个线程,一半5个线程左右,没个线程都调用这一个线程函数,现在cpu占到
30%,我的机器还是双核的,到单核上时候能到50%,大家帮帮忙啊
|
|