gpt4 book ai didi

c# - 如何让程序不使用100% cpu?

转载 作者:行者123 更新时间:2023-12-03 12:49:22 27 4
gpt4 key购买 nike

有 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com