在 c# 控制台应用程序中连续调用函数。不使用无限循环和递归,因为如果使用它们,那么 cpu 使用率会更多。请任何人都可以帮助我解决这个问题。有人建议我使用后台线程,但它不会连续调用该函数。
Thread th = new Thread(//fun);
th.IsBackground = true;
th.start();
在 c# 控制台应用程序中连续调用函数。不使用无限循环和递归,因为如果使用它们,那么 cpu 使用率会更多。请任何人都可以帮助我解决这个问题。有人建议我使用后台线程,但它不会连续调用该函数。
Thread th = new Thread(//fun);
th.IsBackground = true;
th.start();
如果你想连续调用它,那么高 CPU 使用率是必要的:因为 CPU 总是忙于做你想做的事。
如果您想降低 cpu 使用率,那么您不能连续运行您的函数,而只能以(可能非常小的)间隔运行。
你必须做出决定。
您可以使用线程代码,但线程只是有效地调用函数,这意味着您的函数需要递归或它需要有一个无限循环。
public void StartThread()
{
Thread th = new Thread(function);
th.IsBackground = true;
th.start();
}
public void function()
{
//preferably have some way of killing this if needs be so don't necessarily use 'true'
while(true)
{
//do stuff
//sleep an appropriate amount of time to not overload the cpu
//This sleeps (basically pauses thread) for 10 milliseconds
Thread.Sleep(10);
}
}
添加 Thread.Sleep 将停止您所指的 CPU 的过载。只需运行 sleep 一段时间,这对于您的应用程序来说是可以接受的。如果它在 GUI 上更新一个值,那么用户不会真正注意到该值是每半秒更新一次 (Thread.Sleep(500)) 还是每毫秒更新一次 (Thread.Sleep(1))
我不确定我得到你的答案,但让我解释一下线程是如何工作的。
线程
在大多数编程语言中,线程是一种有效地将执行拆分为同步执行的做法。这意味着,两种方法可以同时运行。
线程的常见用途
使用线程的一个示例是侦听服务器上的传入连接。所以你会有一个线程,比如:
while(true)
{
// Listen to incoming messages.
}
无限循环是因为,在任何时候,您都不想停止侦听传入的消息。那就是服务器的作用;管理连接。但是,当程序执行完成时,线程会被杀死。这被认为是常见做法的原因是,因为它在单独的线程上运行,它不会像您想象的那样影响性能。C#非常擅长处理多线程;和大多数语言一样。
备择方案
好吧,这样看。如果您想听 1000 个周期,那么您将执行以下操作:
while(count < 1000)
{
count++;
// Do some thread code.
}
这实际上取决于您想要线程做什么,它定义了进入线程的代码,以及它将运行多长时间。
使用间隔较短的系统计时器。
在计时器的“滴答”事件中:
系统计时器的事件在线程池线程上运行,因此您的控制台应用程序线程正常继续。在应用程序的持续时间内,该函数在间隔允许的范围内尽可能频繁地运行。没有递归。没有无限循环。