C# 如何创建一个永无止境的线程,不会减慢电脑的速度
我用C开发了一个Windows服务,它在OnStart事件中启动7个线程,这些线程调用一个方法来初始化一些硬件设备,然后在等待来自这些设备的外部事件时进入while循环 每个线程中的while循环是:C# 如何创建一个永无止境的线程,不会减慢电脑的速度,c#,multithreading,service,C#,Multithreading,Service,我用C开发了一个Windows服务,它在OnStart事件中启动7个线程,这些线程调用一个方法来初始化一些硬件设备,然后在等待来自这些设备的外部事件时进入while循环 每个线程中的while循环是: try { while (!_shutdownEvent.WaitOne(0)) { } } catch { } 问题
try
{
while (!_shutdownEvent.WaitOne(0)) { }
}
catch
{
}
问题是,当服务启动时,线程正在运行,PC速度非常慢。如何进行这样的循环是最好的方法
线程初始化在while循环之前,线程清理在while循环之后。在每次迭代之后,您可能会让线程休眠几毫秒
try
{
while (!_shutdownEvent.WaitOne(0))
{
Thread.Sleep(1000);
}
}
catch
{
}
在每次迭代之后,您可能会使线程休眠几毫秒
try
{
while (!_shutdownEvent.WaitOne(0))
{
Thread.Sleep(1000);
}
}
catch
{
}
您的硬件设备应该在数据到达并调用事件时触发中断,这意味着您不需要在7个不同的线程中循环。相反,一旦您从硬件接收到一些数据,然后启动一个线程来处理该数据,以便主线程可以接收更多数据。这种类型的while循环将冻结一个线程,如果您在带有HT的四核处理器上有7个线程,这意味着您的PC上所有其他程序只剩下一个线程,这会导致速度减慢。当数据到达并调用事件时,您的硬件设备应触发中断,这意味着您不需要在7个不同的线程中循环。相反,一旦您从硬件接收到一些数据,然后启动一个线程来处理该数据,以便主线程可以接收更多数据。这种类型的while循环将冻结一个线程,如果您在带有HT的四核处理器上有7个线程,这意味着您的PC上所有其他程序只剩下一个线程,这会导致速度减慢。最好的方法是根本不要循环。显示您正在使用的硬件的API,当您忽略的数据可用时,可能会引发一个事件,这将使您完全摆脱循环。最好的方法是根本不循环。显示您正在使用的硬件的API,当您忽略的数据可用时,可能会引发一个事件,这将使您完全摆脱循环。或者更好_shutdownEvent.WaitOne1000,同样的效果,但是会在WaitOne的超时上暂停。或者更好_shutdownEvent.WaitOne1000,效果相同,但会在WaitOne超时时暂停。