C# 作为守护进程的Mono控制台应用程序占用100%的cpu
我有一个控制台应用程序(我知道它应该是一个服务),在末尾有一个循环,所以它永远不会停止:C# 作为守护进程的Mono控制台应用程序占用100%的cpu,c#,mono,C#,Mono,我有一个控制台应用程序(我知道它应该是一个服务),在末尾有一个循环,所以它永远不会停止: while (true) { Console.ReadLine(); } 它在使用mono(raspbian wheezy)的Raspberry Pi上运行得非常完美,但由于我使用raspbian Jessie升级到了Pi 2,所以它作为守护进程启动时使用100%的cpu Readline()似乎总是返回一个空行。有什么想法吗?出于测试目的,我的init.d脚本非常简单: cd /myAppDir
while (true)
{
Console.ReadLine();
}
它在使用mono(raspbian wheezy)的Raspberry Pi上运行得非常完美,但由于我使用raspbian Jessie升级到了Pi 2,所以它作为守护进程启动时使用100%的cpu
Readline()似乎总是返回一个空行。有什么想法吗?出于测试目的,我的init.d脚本非常简单:
cd /myAppDir/
mono MyApp.exe &
exit 0
我试过使用nohup,最后有/没有&
,但没有成功
[编辑]
我不能使用线程。睡眠,因为我有一个定时器池UART。一个简单的解决方案是为所有工作创建另一个线程,只在主线程中执行睡眠,但我想理解为什么它不能这样工作
作为守护进程启动时,它使用100%的cpu
我不知道作为守护进程如何启动进程,但通常,守护进程会将stdin
重定向到/dev/null
Null设备立即产生EOF,因此Console.ReadLine()
永远不会阻塞
我猜(我没有Raspbian),运行守护进程的方式从Raspbian Wheezy变为Jessie。您只需要在完成Main(string[]args)之前使用它
有了它,你的应用程序将不会占用100%的CPU使用率,这就是我所想的,这就是为什么我惊讶地看到它能处理喘息。。。谢谢这是一个老问题,但如果你仔细阅读,你会发现我说“我不能使用线程。睡眠是因为……”。我们所有的项目现在都使用.NETCore
private static void Main(string[] args)
{
//call method for daemon before while
while (true)
{
Thread.Sleep(1000);
}
}