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