你是不是用死循环来检测数据和分析数据呀。那很费CPU时间的
解决方案 »
- 半桶水都没有啊。。怎么办。。求帮忙~~
- 深入研究Windows内部原理系列之十六:使您成为Windows专家的一些学习习惯
- 请问如何判断一个SOCKET的收发
- 如何在获取域中帐户和密码:及如何判断用户输入的帐号和密码是正确的域帐号和密码
- 问一个简单的问题,CAsyncSocket::Send是否会出现返回零的情况?经过我的反复测试它只返回非零或SOCKET_ERROR.
- 如何在程序中实现判断一个文件是否为隐藏文件
- 在MFC的应用程序中如何得到程序运行的参数?类似agrc,agrv的东东。
- 高分求万年历算法!!
- 大家来谈谈MFC中多线程图形编程中的安全性.
- 刚涉世讨教
- 有没有扑克游戏(拖拉机)的源代码?谢谢
- 使用网络上的打印机时出现错误提示,该怎么写这段代码呢??????
因为我使用的是一块控制卡,读取的是控制卡所带的串口缓冲区中的数据,好象没有类似WaitForSingleObject函数的函数接口
我的线程是工作者线程,能接收消息吗?
MSDN中有详细说明,多看看,最好用最新的MSDN。
但在现在一般的机器上应该也不会有问题,可能是算法有点问题。
好好检查一下吧。
因为我建议使用同步方式。为什么呢?FT,多线程还异步,多此一举么。使用Wait函数等待,实际上也就是同步方式啊。异步方式的用处在于线程不必等待而可以处理其他事情,它现在没什么可处理的,为什么要异步呢?死循环是同步方是最基本的结构。不过你要考虑一下退出的问题。如果不方便,可以使用“假同步”,也就是用Wait函数实现同步运行。注意哦,本质上还是同步的。
效率不高的问题很正常。大家可能没有经验,我当年可是做过这个问题。问题的核心在于Windows是分时系统,线程调度不可能满足很高的实时要求。其他线程会随机干扰你的工作,调高优先级也没用,弄不好系统会死掉。另外执行效率也不高,几个API调用就要几个毫秒,稍微快一点的采样都不行。这些问题从软件编码很难解决,有条件的话你应当考虑上下位机的结构。
建议你读一读《Windows NT技术内幕》,对这个问题会有更深了解。
那你的意思是说我现在在单机的环境中只能这样了吗?
有没有更好的解决方法?
比如我当年调过的程序,采样旋转机构数据,每转采至少6次,每秒50转以上。这就比较有问题,采样频率超过了300Hz,周期小于4ms。测一下Windows函数调用就知道,几个调用就可能用掉几个毫秒,所以满足要求很困难。最后是用了缓存。但是如果实时要求高就不好办。
如果想维持目前的结构,一个办法是间歇采样,在采样期间使用实时级优先级,这样系统会短暂失去反应,所以采样时间不能长,编程一定要小心。这个办法比较野蛮,也不能根本解决。