草庐IT

c# - Thread.Sleep 或 Thread.Yield

我有一个方法,它使用后台工作程序轮询DLL以获取如下所示的状态:vartimeout=DateTime.Now.AddSeconds(3);while(System.Status!=Status.Complete//ourstatusisnotcomplete&&DateTime.Now查看我的CPU%时,yield()和spinwait()导致我的应用在我的PC上使用率高达50%。使用Sleep(1),我的CPU%保持在6%。有人告诉我应该选择Thread.Yield(),但是CPU%的峰值让我很困扰。像这样的最佳做法是什么? 最佳答案

c# - 是 Thread.Sleep(Timeout.Infinite);比 while(true){} 更有效?

我有一个控制台应用程序,我想在监听事件的同时一直保持打开状态。我已经测试了Thread.Sleep(Timeout.Infinite);和while(true){}并且都允许在保持控制台应用程序打开的同时引发事件。有没有我应该优先使用的?如果线程正在休眠,是否有任何我不应该做的事情,例如修改类范围内声明的静态集合? 最佳答案 我建议使用ManualResetEvent(或其他WaitHandle),并调用ManualResetEvent.WaitOne.这将具有与永远sleep类似的效果,除了它为您提供了一种干净的方式,可以在需要时

c# - 如何在不使用 sleep 的情况下在 C# 中执行短暂的延迟?

我对编程非常陌生,我认为到目前为止我已经学得很好,但我仍然无法理解按我想要的方式进行延迟的想法。我正在做的是一种使用涉及战斗系统的Windows窗体应用程序的测试“游戏”。在其中,我想制作一个每隔几秒执行一次Action的NPC。问题是,我还想让玩家在攻击之间进行交互。Thread.sleep似乎真的对我不起作用,不仅因为我不知道如何进行多线程,而且每当我尝试运行它时,就像这样:textBox1.Text+="\r\nThreadSleeps!";System.Threading.Thread.Sleep(4000);textBox1.Text+="\r\nThreadawakens!

c# - Thread.Sleep 少于 1 毫秒

我想在不到1毫秒的时间内调用线程休眠。我读到thread.Sleep和Windows操作系统都不支持它。解决方案是什么?对于所有想知道我为什么需要这个的人:我正在进行压力测试,想知道我的模块每秒可以处理多少条消息。所以我的代码是://SettherelativepartofSecondhatwillbeallocatedforeachmessage//Forexample:5messages-everymessagewillget200milisecondsvarquantum=1000/numOfMessages;for(vari=0;i我很乐意听取您的意见。

c# - 使用 Thread.Sleep() 总是不好的吗?

我为Random类创建了一个扩展方法,它随机执行一个Action(voiddelegate):publicstaticclassRandomExtension{privatestaticbool_isAlive;privatestaticTask_executer;publicstaticvoidExecuteRandomAsync(thisRandomrandom,intmin,intmax,intminDuration,Actionaction){TaskouterTask=Task.Factory.StartNew(()=>{_isAlive=true;_executer=Tas

c# - Thread.Sleep() 的替代品

我们希望每N分钟运行一次任务列表。所以我们创建了一个带有的任务执行器do{DoWork();}while(!stopRequested)现在我们想在工作周期之间暂停一下。每个人似乎都认为Thread.Sleep()是魔鬼。我看到有人提到使用Monitor/Event的东西,但我们没有其他人告诉我们去做工作。我们只想每N分钟做一些事情,比如发条。那么是否有替代方法或者我是否找到了Thread.Sleep的有效用法?有人在另一篇文章中提到WaitHandle.WaitOne()作为替代方法,但您显然不能从非静态方法中调用它?或者至少我不能,因为我得到一个编译时错误..Anobjectref

c# - System.Timers.Timer/Threading.Timer 与 Thread with WhileLoop + Thread.Sleep 用于周期性任务

在我的应用程序中,我必须定期向“兄弟”应用程序发送心跳。使用System.Timers.Timer/Threading.Timer或使用带有while循环和Thread.Sleep的线程更好吗?心跳间隔为1秒。while(!exit){//doworkThread.Sleep(1000);}或myTimer.Start(()=>{//dowork},1000);//pseudocode(notactualsyntax)... 最佳答案 System.Threading.Timer有我的投票权。System.Timers.Timer旨

C# 定时器或 Thread.Sleep

我正在运行Windows服务并使用循环和Thread.Sleep重复任务,使用计时器方法会更好吗?如果是,一个代码示例会很棒我目前正在使用这段代码来重复intcurMinute;intlastMinute=DateTime.Now.AddMinutes(-1).Minute;while(condition){curMinute=DateTime.Now.Minute;if(lastMinute 最佳答案 IMO,计时器是个更好的主意。这样,如果您的服务被要求停止,它可以非常快速地做出响应,并且不会再次调用计时器滴答处理程序.....

c# - Thread.Sleep(1) 有什么特别之处吗?

JoeDuffy(ConcurrentProgrammingonWindows的作者)在thisblogarticle中写道Thread.Sleep(1)优于Thread.Sleep(0),因为它会挂起相同和较低优先级的线程,而不仅仅是与Thread.Sleep(0)相同优先级的线程。.NETversionofMSDNsaysThread.Sleep(0)比较特殊,它会挂起这个线程,让其他等待的线程执行。但它没有提及Thread.Sleep(1)(对于任何.NET版本)。那么,Thread.Sleep(1)实际上做了什么特别的事情吗?背景:我正在更新并发编程方面的知识。我写了一些C#代

c# - 如何在 .NET 4.0 中请求超时或取消之前为 "sleep"

休眠一定时间但能够被来自CancellationToken的IsCancellationRequested打断的最佳方法是什么?我正在寻找适用于.NET4.0的解决方案。我想写voidMyFunc(CancellationTokenct){//...//simulatesomelonglastingoperationthatshouldbecancelableThread.Sleep(TimeSpan.FromMilliseconds(10000),ct);} 最佳答案 我刚刚在这里写了博客:CancellationTokenand