线程能否一直运行?

extremity 2002-10-30 08:17:00
一个有点弱智的问题,不好意思:)
想要在一个扩展串口上收发数据,由于接收数据的速率较快,我用5ms多媒体时钟还是会丢不少数据,所以换用一个线程一直用while判断,一旦硬件有标志就取数据
但是这样的话CPU占用一直是100%,请问还有什么办法没有?
谢谢了
...全文
296 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
horris 2002-11-06
  • 打赏
  • 举报
回复
用WaitCommEvent+Overlapped I/O+Multiple Threads,
我作了个在实时数据采集方面作了优化的串口访问组件,用了上述几项技术,效果不错,就是用起来步骤有点麻烦,还要用到回调函数。要的话给我发信:horris@163.net,注明是CSDN上的。
lkcowboy 2002-11-05
  • 打赏
  • 举报
回复
up
liron71 2002-11-02
  • 打赏
  • 举报
回复
在UI线程函数内运行其Thread->Run()函数,开启线程消息循环,让线程去捕获数据,当断口有数据时,给该线程发一个消息,让线程去读数据.
jeffandjeff 2002-10-31
  • 打赏
  • 举报
回复
不能用阻塞方式?
MSVCer 2002-10-31
  • 打赏
  • 举报
回复
gz
zj_ok 2002-10-31
  • 打赏
  • 举报
回复
我也觉得能用事件处理最好
hdqqq 2002-10-30
  • 打赏
  • 举报
回复
建议线程优先级改成最小,这样cup使用即使100%,其它程序抢断也比较容易
extremity 2002-10-30
  • 打赏
  • 举报
回复
这块卡是429的,没有驱动,只能用out和in查询端口
而且这种慢速设备要么没有数据,数据一来就是ns级,而且只能一个一个读
头大,兄弟们再给我支点招啊
Semigod 2002-10-30
  • 打赏
  • 举报
回复
这样始终不是个办法,最好还是想办法利用硬件事件来处理吧
双杯献酒 2002-10-30
  • 打赏
  • 举报
回复
您可以在while()的最后Sleep一下

while(程序没要求线程退出)
{
if(数据到达)
{
//做您的工作
}
else
{
Sleep(10);//自己斟酌取多少
}
}
yongdu 2002-10-30
  • 打赏
  • 举报
回复
数据来时不能报个消息或是一个事件吗?

实在不行就while中sleep一会儿。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧