次の方法で共有


Timeout.Infinite フィールド

無期限の待機期間を指定するために使用される定数。このフィールドは定数です。

Public Const Infinite As Integer
[C#]
public const int Infinite;
[C++]
public: const int Infinite;
[JScript]
public var Infinite : int;

解説

この定数の値は -1 です。 Sleep および Join などの timeout パラメータを受け入れるスレッド メソッドのために、この値を使用して、経過時間によって通常発生するメソッドの動作を行わないようにします。

使用例

[Visual Basic, C#, C++] 無制限の時間のアイドル状態に入り、その後呼び出されるスレッドの例を次に示します。

 
Option Explicit
Option Strict

Imports System
Imports System.Security.Permissions
Imports System.Threading

<Assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum, _
    ControlThread := True)>

Public Class ThreadInterrupt

    Shared Sub Main()
        Dim stayAwake As New StayAwake()
        Dim newThread As New Thread(AddressOf stayAwake.ThreadMethod)
        newThread.Start()

        ' The following line causes an exception to be thrown 
        ' in ThreadMethod if newThread is currently blocked
        ' or becomes blocked in the future.
        newThread.Interrupt()
        Console.WriteLine("Main thread calls Interrupt on newThread.")

        ' Tell newThread to go to sleep.
        stayAwake.SleepSwitch = True

        ' Wait for newThread to end.
        newThread.Join()
    End Sub

End Class

Public Class StayAwake

    Dim sleepSwitchValue As Boolean = False

    WriteOnly Property SleepSwitch As Boolean
        Set
            sleepSwitchValue = Value
        End Set
    End Property 

    Sub New()
    End Sub

    Sub ThreadMethod()
        Console.WriteLine("newThread is executing ThreadMethod.")
        While Not sleepSwitchValue

            ' Use SpinWait instead of Sleep to demonstrate the 
            ' effect of calling Interrupt on a running thread.
            Thread.SpinWait(10000000)
        End While
        Try
            Console.WriteLine("newThread going to sleep.")

            ' When newThread goes to sleep, it is immediately 
            ' woken up by a ThreadInterruptedException.
            Thread.Sleep(Timeout.Infinite)
        Catch ex As ThreadInterruptedException
            Console.WriteLine("newThread cannot go to " & _
                "sleep - interrupted by main thread.")
        End Try
    End Sub

End Class

[C#] 
using System;
using System.Security.Permissions;
using System.Threading;

[assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum,
    ControlThread = true)]

class ThreadInterrupt
{
    static void Main()
    {
        StayAwake stayAwake = new StayAwake();
        Thread newThread = 
            new Thread(new ThreadStart(stayAwake.ThreadMethod));
        newThread.Start();

        // The following line causes an exception to be thrown 
        // in ThreadMethod if newThread is currently blocked
        // or becomes blocked in the future.
        newThread.Interrupt();
        Console.WriteLine("Main thread calls Interrupt on newThread.");

        // Tell newThread to go to sleep.
        stayAwake.SleepSwitch = true;

        // Wait for newThread to end.
        newThread.Join();
    }
}

class StayAwake
{
    bool sleepSwitch = false;

    public bool SleepSwitch
    {
        set{ sleepSwitch = value; }
    }

    public StayAwake(){}

    public void ThreadMethod()
    {
        Console.WriteLine("newThread is executing ThreadMethod.");
        while(!sleepSwitch)
        {
            // Use SpinWait instead of Sleep to demonstrate the 
            // effect of calling Interrupt on a running thread.
            Thread.SpinWait(10000000);
        }
        try
        {
            Console.WriteLine("newThread going to sleep.");

            // When newThread goes to sleep, it is immediately 
            // woken up by a ThreadInterruptedException.
            Thread.Sleep(Timeout.Infinite);
        }
        catch(ThreadInterruptedException e)
        {
            Console.WriteLine("newThread cannot go to sleep - " +
                "interrupted by main thread.");
        }
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Security::Permissions;
using namespace System::Threading;

[assembly: SecurityPermissionAttribute(SecurityAction::RequestMinimum, 
    ControlThread = true)];

__gc class StayAwake
{
    bool sleepSwitch;

public:
    __property void set_SleepSwitch(bool value)
    {
        sleepSwitch = value;
    }

    StayAwake(){sleepSwitch = false;}

    void ThreadMethod()
    {
        Console::WriteLine(S"newThread is executing ThreadMethod.");

        while(!sleepSwitch)
        {
            // Use SpinWait instead of Sleep to demonstrate the 
            // effect of calling Interrupt on a running thread.
            Thread::SpinWait(10000000);
        }
        try
        {
            Console::WriteLine(S"newThread going to sleep.");

            // When newThread goes to sleep, it is immediately 
            // woken up by a ThreadInterruptedException.
            Thread::Sleep(Timeout::Infinite);
        }
        catch(ThreadInterruptedException* e)
        {
            Console::WriteLine(S"newThread cannot go to sleep - "
                S"interrupted by main thread.");
        }
    }
};

void main()
{
    StayAwake* stayAwake = new StayAwake();
    Thread* newThread = new Thread(
        new ThreadStart(stayAwake, &StayAwake::ThreadMethod));
    newThread->Start();

    // The following line causes an exception to be thrown 
    // in ThreadMethod if newThread is currently blocked
    // or becomes blocked in the future.
    newThread->Interrupt();
    Console::WriteLine(S"Main thread calls Interrupt on newThread.");

    // Then tell newThread to go to sleep.
    stayAwake->SleepSwitch = true;

    // Wait for newThread to end.
    newThread->Join();
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Timeout クラス | Timeout メンバ | System.Threading 名前空間