这个睡眠线程有什么意义

时间:2013-04-20 01:01:19

标签: c# multithreading thread-sleep

我现在正在阅读一些不属于我的代码。在代码中有一个包含以下代码的线程:

while (true)
{
     Thread.sleep(int.MaxValue);
}

它还会捕获InterruptedException并重新进入循环,因此循环甚至无法中断。

有谁知道为什么这个帖子会存在,目的是什么?

编辑:完整的代码,更多一点上下文:

using IKVM.Attributes;
using java.lang;
using System;
using System.Runtime.CompilerServices;
namespace applicationNamespace
{
internal sealed class DedicatedServerSleepThread : Thread
{
    internal DedicatedServer theDecitatedServer;

    [MethodImpl(MethodImplOptions.NoInlining)]
    internal DedicatedServerSleepThread(DedicatedServer dedicatedServer)
    {
        this.theDecitatedServer = dedicatedServer;
        base.setDaemon(true);
        this.start();
    }
    [MethodImpl(MethodImplOptions.NoInlining)]
    public override void run()
    {
        while (true)
        {
            try
            {
                while (true)
                {
                    System.Threading.Thread.Sleep(int.MaxValue);
                }
            }
            catch (System.Threading.ThreadInterruptedException)
            {
            }
        }
    }
    static DedicatedServerSleepThread()
    {
    }
}
}

请注意,早期代码使用了一些非标准库,因此小写睡眠有效。具体来说,它使用的是ikvm库(基于java标准库,用于将java程序交叉编译为.net)

这是一个java服务器程序,我交叉编译为.net字节码然后反编译。我不确定是否有人曾经因为某种原因曾见过专门睡觉的帖子,如果是的话,原因是什么。 ta.speot.is给出了一个非常好的答案。

3 个答案:

答案 0 :(得分:3)

编写的代码(除了Sleep大写),只能用于创建一个什么都不做的线程,并占用一些额外的内存(用于线程的堆栈数据)。

该线程可能是为了执行某些其他功能,但它可能应该以另一种方式处理。

答案 1 :(得分:3)

让我们忽略你发布的代码,因为它不会编译,只关注一个永远休眠的线程是否有用。

我可以想到三个原因,一个线程的工作是睡觉,但没有一个是特别合法的。

什么都不做

线程可能存在,永远不会有意义。如果有人要求你创建一个不应该做任何有意义的线程的工作,那么你可能会想出那些代码。

保持CLR /流程

如果它是前台线程,即使主线程完成,线程也会使进程和CLR保持活动状态。 From MSDN

  

托管线程是后台线程或前台线程。后台线程与前台线程相同,但有一个例外:后台线程不会使托管执行环境保持运行。一旦所有前台线程在托管进程中停止(其中.exe文件是托管程序集),系统将停止所有后台线程并关闭。

冷静下来

有可能通过将线程与睡眠联系起来,其他可以执行有意义工作的线程不会频繁启动(例如,如果它们被安排在线程池或其他环境中)。 From The Daily WTF

  

由于大量的数据运算加速,cpu不再有机会降低速度。在服务器中建立的热量,风扇控制器炒和cpu的煮熟。作为购买冗余冷却的替代方案,他们让我通过策略性的睡眠将应用程序降低到以前的性能水平。

答案 2 :(得分:1)

从您向我们展示的内容中,它只是创建一个线程并使其永久睡眠。没有更多的背景,我们无法告诉你任何其他事情