-3

在 c# 控制台应用程序中连续调用函数。不使用无限循环和递归,因为如果使用它们,那么 cpu 使用率会更多。请任何人都可以帮助我解决这个问题。有人建议我使用后台线程,但它不会连续调用该函数。

Thread th = new Thread(//fun);
th.IsBackground = true;
th.start();
4

4 回答 4

0

如果你想连续调用它,那么高 CPU 使用率是必要的:因为 CPU 总是忙于做你想做的事。

如果您想降低 cpu 使用率,那么您不能连续运行您的函数,而只能以(可能非常小的)间隔运行。

你必须做出决定。

于 2013-03-08T12:03:34.653 回答
0

您可以使用线程代码,但线程只是有效地调用函数,这意味着您的函数需要递归或它需要有一个无限循环。

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))

于 2013-03-08T12:05:38.197 回答
0

我不确定我得到你的答案,但让我解释一下线程是如何工作的。


线程

在大多数编程语言中,线程是一种有效地将执行拆分为同步执行的做法。这意味着,两种方法可以同时运行。

线程的常见用途

使用线程的一个示例是侦听服务器上的传入连接。所以你会有一个线程,比如:

while(true)
{
    // Listen to incoming messages.
}

无限循环是因为,在任何时候,您都不想停止侦听传入的消息。那就是服务器的作用;管理连接。但是,当程序执行完成时,线程会被杀死。这被认为是常见做法的原因是,因为它在单独的线程上运行,它不会像您想象的那样影响性能。C#非常擅长处理多线程;和大多数语言一样。

备择方案

好吧,这样看。如果您想听 1000 个周期,那么您将执行以下操作:

while(count < 1000)
{
     count++;
     // Do some thread code.
}

这实际上取决于您想要线程做什么,它定义了进入线程的代码,以及它将运行多长时间。

于 2013-03-08T12:06:39.553 回答
0

使用间隔较短的系统计时器。

在计时器的“滴答”事件中:

  • 停止计时器
  • 调用函数
  • 重新启动计时器

系统计时器的事件在线程池线程上运行,因此您的控制台应用程序线程正常继续。在应用程序的持续时间内,该函数在间隔允许的范围内尽可能频繁地运行。没有递归。没有无限循环。

于 2013-03-08T12:06:56.450 回答