Mono控制台应用程序作为守护程序占用100%cpu

问题描述 投票:0回答:2

我有一个控制台应用程序(我知道它应该是一项服务),最后有一个循环,所以它永远不会停止:

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,最后使用/不使用&,但没有成功

[编辑]我没有Thread.Sleep,因为我有一个Timer池在UART中。一个简单的解决方案是为所有工作创建另一个线程,然后在主线程中执行Sleep,但是我想了解为什么它不能像这样工作

c# mono
2个回答
2
投票

作为守护程序启动时使用100%cpu。

我不知道您如何以守护程序的身份启动进程,但是通常,守护进程将stdin重定向到/dev/null

空设备立即产生EOF,因此Console.ReadLine()将永远不会阻塞。

我想(我没有Raspbian),运行守护程序的方式从Raspbian Wheezy变为Jessie。


0
投票

您只需要在完成Main(string [] args)之前就需要此

private static void Main(string[] args)
{
     //call method for daemon before while
     while (true)
     {
          Thread.Sleep(1000);
     }
}

使用此应用,您的应用不会占用100%的CPU使用率

© www.soinside.com 2019 - 2024. All rights reserved.