c#中的函数调用
本文关键字:函数调用 | 更新日期: 2023-09-27 18:03:02
在c#控制台应用程序中连续调用函数。不使用无限循环和递归,因为如果使用它们,CPU占用更多。请问有人能帮我解决这个问题吗?有人建议我使用后台线程,但它不会连续调用函数。
Thread th = new Thread(//fun);
th.IsBackground = true;
th.start();
使用一个短间隔的系统计时器。
在定时器的"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.
}
这真的取决于你想让线程做什么,它定义了进入线程的代码,以及它将运行多长时间。