相关疑难解决方法(0)

CPU友好的无限循环

编写无限循环很简单:

while(true){
    //add whatever break condition here
}
Run Code Online (Sandbox Code Playgroud)

但这会破坏CPU的性能.此执行线程将尽可能多地从CPU的电源中获取.

降低对CPU影响的最佳方法是什么?添加一些Thread.Sleep(n)应该可以解决问题,但为Sleep()方法设置高超时值可能表示对操作系统的应用程序无响应.

假设我需要在控制台应用程序中每分钟执行一次任务.我需要继续Main()在"无限循环"中运行,而计时器将触发将完成工作的事件.我想保持Main()对CPU的最小影响.

你有什么方法可以建议.Sleep()可以,但正如我已经提到的,这可能表明操作系统没有响应.

后期编辑:

我想更好地解释一下我在寻找什么:

  1. 我需要一个控制台应用程序不是Windows服务.控制台应用程序可以使用Compact Framework模拟Windows Mobile 6.x系统上的Windows服务.

  2. 只要Windows Mobile设备运行,我需要一种方法让应用程序保持活动状态.

  3. 我们都知道控制台应用程序运行只要其静态Main()函数运行,所以我需要一种方法来阻止Main()函数退出.

  4. 在特殊情况下(例如:更新应用程序),我需要请求应用程序停止,因此我需要无限循环并测试某些退出条件.例如,这就是为什么Console.ReadLine()我没用.没有退出条件检查.

  5. 关于上面,我仍然希望Main()函数尽可能地对资源友好.让我们确定检查退出条件的函数的指纹.

.net c# console-application infinite-loop

53
推荐指数
2
解决办法
5万
查看次数

在C#中每分钟检查一次

我正在制作一个每隔1,5或30分钟甚至每小时通知用户的应用程序.例如,用户在5:06打开程序,程序将在6:06通知用户.

所以我当前的代码使用Thread.Sleep()函数每隔5分钟通知用户,但我发现它有点蹩脚.

这是我的代码:

public void timeIdentifier()
    {
        seiyu.SelectVoiceByHints(VoiceGender.Female);
        while(true)
        {
            string alarm = String.Format("Time check");
            seiyu.Speak(alarm);
            string sayTime = String.Format(DateTime.Now.ToString("h:mm tt"));
            seiyu.Speak(sayTime);
            // It will sleep for 5 minutes LOL
            Thread.Sleep(300000);
        }
    }
Run Code Online (Sandbox Code Playgroud)

.net c# visual-studio

1
推荐指数
1
解决办法
1601
查看次数