Tag: 睡眠

SwitchToThread与睡眠(1)

我想知道调用Thread.Sleep(1)和调用SwitchToThread之间的实际区别是什么(如果我们忽略它当前没有被BCL暴露)。 Joe Duffy在他的post中提到: “kernel32!SwitchToThread API没有出现Sleep(0)和Sleep(1)的问题。” (关于调度程序的行为) 为什么Sleep不会像SwitchToThread一样? 为什么存在这种差异,以及它有什么用呢? (如果有的话……)

C#让pc睡眠或hibernate

我想将我的系统置于睡眠或hibernate状态,两种不同的选择。 我如何使用API​​执行此操作,我真的不想使用Process,这不允许我选择我想要的操作方法。

Thread.Sleep或Thread.Yield

我有一个方法,使用后台工作程序轮询DLL的状态,如下所示: var timeout = DateTime.Now.AddSeconds(3); while (System.Status != Status.Complete // our status is not complete && DateTime.Now < timeout // have not timed out && !_Worker.CancellationPending) // backgroundworker has not been canceled { //Thread.Yield(); //Thread.SpinWait(1); //Thread.Sleep(1); } 在查看我的CPU%时, yield()和spinwait()会导致我的应用在我的电脑上拍摄高达50%。 使用Sleep(1)我的CPU%保持在6%。 有人告诉我,我应该选择Thread.Yield() ,但CPU%的峰值Thread.Yield()我烦恼。 对于这样的事情,最佳做法是什么?

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

我对编程非常陌生,到目前为止,我一直学得很好,我想,但我仍然无法理解按照我想要的方式做出延迟的想法。 我正在研究的是使用涉及战斗系统的Windows表单应用程序的一种测试“游戏”。 在其中,我想让NPC每隔几秒钟做一次动作。 问题是,我还想让玩家在攻击之间进行交互。 Thread.sleep似乎对我不起作用,不仅因为我不知道如何multithreading,而且每当我尝试运行它时,比如说: textBox1.Text += “\r\nThread Sleeps!”; System.Threading.Thread.Sleep(4000); textBox1.Text += “\r\nThread awakens!”; 它似乎坚持先睡觉,然后打印两条线。 我想这就是我现在可以说的全部,但如果那仍然太模糊或冗长,请随时告诉我。 简而言之,在C#中我想在运行之前做出一些延迟,但同时仍然允许用户交互。

定时器在待机模式下会发生什么?

我正在使用Timer from Timers命名空间。 当PC进入睡眠状态或hibernate状态时,计时器会发生什么? 我有计时器设置为6小时延迟。 在这些情况下会发生什么。 1)定时器从0小时开始,立即进入hibernate/hibernate状态。 然后PC在第5小时醒来。我的计时器会在接下来的1小时后或接下来的6小时后点火吗? 2)定时器从0小时开始,立即进入hibernate/hibernate状态。 然后PC在第7小时醒来。一旦PC唤醒,我的计时器是否会立即点火,或者它会“错过”一次并在接下来的5个小时内点火? 从PC唤醒时间或之前的“错过”事件开始计算直到下一个事件?

如何异步等待x秒然后执行某些操作?

我知道在C#和Windows Forms中有Thread.Sleep和System.Windows.Forms.Timer和Monitor.Wait 。 我似乎无法弄清楚如何等待X秒然后做其他事情 – 没有锁定线程。 我有一个带按钮的表格。 在按钮上单击计时器应启动并等待5秒钟。 在这5秒钟后,表格上的其他一些控件显示为绿色。 当使用Thread.Sleep ,整个应用程序将在5秒内无响应 – 所以我如何“在5秒后执行某些操作”?