免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10874 | 回复: 16
打印 上一主题 下一主题

[C] 如何降低CPU使用率 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-10 10:27 |只看该作者 |倒序浏览
现在在做一个LINUX下的控制程序, 其中一个线程需要不断的使用循环, 这样CPU占用率几乎是100%, 不知道有什么好办法能降低此程序的CPU占用率呢.

其中执行精度为半秒一循环, 但别的地方用了定时器,已用了Sigalarm, 所以现在这个地方用的代码为: do { ... }while(half_sec==0);

还有的线程执行精度为100MS,用的同样方式,  就这个循环等待造成的CPU使用率特别高, 不知道有什么好办法能让它在此挂起, 到达时间后再唤醒呢?

注: 已用了sigalarm, 所以不可能再用sleep函数, 而且sleep函数的精度为1S,太低了.  要是sigalarm能重复调用就好了, 即能产生多个定时器.

困扰了好久了,一直没解决,还望各位老大指教一二.

论坛徽章:
0
2 [报告]
发表于 2009-06-10 10:30 |只看该作者
不明白你这个东西用在什么地方的?如果有可能,不用循环的方式,而是采用触发的方式

论坛徽章:
0
3 [报告]
发表于 2009-06-10 10:30 |只看该作者
你为什么需要100MS的精度?

论坛徽章:
0
4 [报告]
发表于 2009-06-10 10:34 |只看该作者
我现在想的就是有什么办法能触发, 循环是最浪费CPU的了.

论坛徽章:
0
5 [报告]
发表于 2009-06-10 10:37 |只看该作者
做控制的,每100MS或是其它时间来执行一动作.

论坛徽章:
0
6 [报告]
发表于 2009-06-10 10:40 |只看该作者
用select

论坛徽章:
0
7 [报告]
发表于 2009-06-10 10:47 |只看该作者
但是select里的&tv会破坏掉我原有的Sigalarm信号吧,我一会儿试试

论坛徽章:
0
8 [报告]
发表于 2009-06-10 11:04 |只看该作者

回复 #1 rollin7 的帖子

usleep

论坛徽章:
0
9 [报告]
发表于 2009-06-10 11:28 |只看该作者
没有用到还死跑,用中断不行吗

论坛徽章:
0
10 [报告]
发表于 2009-06-10 11:43 |只看该作者
发现这种进程我直接 kill()。
100ms 的精度是很容易得到的,poll() 就行。
把 CPU 时间全部占有的进程,一种可能是没有调试好的程序,要不然就是不会隐藏自己的病毒。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP