c#中的函数调用

本文关键字:函数调用 | 更新日期: 2023-09-27 18:03:02

在c#控制台应用程序中连续调用函数。不使用无限循环和递归,因为如果使用它们,CPU占用更多。请问有人能帮我解决这个问题吗?有人建议我使用后台线程,但它不会连续调用函数。

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

c#中的函数调用

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

在定时器的"tick"事件中:

  • 停止定时器
  • 调用函数
  • 重启定时器

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

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

如果你想有一个较低的cpu使用率,那么你不能连续运行你的函数,但只能在一个(可能非常小的)间隔。

你必须决定。

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

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

添加线程。睡眠将停止你所提到的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.
}

这真的取决于你想让线程做什么,它定义了进入线程的代码,以及它将运行多长时间。