- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有 5 个线程在无限循环中运行。
当队列不为空时,其中2个将发送消息。
其中4个会在5分钟内持续发送心跳。
其中之一是从另一个来源请求数据。
当它使用 100% 的 CPU 时,我无法在窗口中使用任何其他应用程序。整个窗口变得非常慢。
编辑: sleep 可以放在 WaitOne 之后吗?
if(autoEvent.WaitOne())
{
}
else
{
}
Thread.Sleep(100);
sleep可以放在subscriber.Recv()之后,即ZeroMQ吗?
如果没有 Recv(),所有线程我都会休眠,但是有一个线程我不敢在只有 client.Send 的实时数据馈送线程中休眠,只有一个线程会导致 100% 吗?
最佳答案
问:如何让程序不使用100% CPU?
A:不要创建繁忙循环!!!
阻止是好的。有很多方法可以实现“阻塞直到有事情可做”。包括使用警报信号或计时器(很差,但确实有所改进)、执行超时套接字读取(如果您碰巧收到网络套接字通知)或使用超时 Windows 事件对象。
如果一切都失败了,你总是可以使用“Sleep()”。如果可以避免的话,我不鼓励使用“ sleep ”——几乎总是有更好的设计策略。但它会让让您远离 100% CPU 繁忙循环;)
==========================================
附录:您发布了一些代码(谢谢!)
您正在使用 xxx.WaitOne()。
只需使用 WaitOne() (阻塞调用),并设置超时。这是一个理想的解决方案:没有繁忙循环,不需要“ sleep ”!
http://msdn.microsoft.com/en-us/library/aa332441%28v=vs.71%29.aspx
关于c# - 如何让程序不使用100% cpu?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695277/
我是一名优秀的程序员,十分优秀!