Timeout クラス
アセンブリ: mscorlib (mscorlib.dll 内)
構文
このクラスの唯一のメンバである Infinite は、Thread.Sleep(Int32)、Thread.Join(Int32)、および ReaderWriterLock.AcquireReaderLock(Int32) などの整数の timeout パラメータを受け入れるメソッドによって使用される定数です。
無制限の時間のアイドル状態に入り、その後呼び出されるスレッドの例を次に示します。
Option Explicit Option Strict Imports System Imports System.Security.Permissions Imports System.Threading <Assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum, _ ControlThread := True)> Public Class ThreadInterrupt <MTAThread> _ 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
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."); } } }
using namespace System; using namespace System::Security::Permissions; using namespace System::Threading; [assembly:SecurityPermissionAttribute(SecurityAction::RequestMinimum, ControlThread=true)]; ref class StayAwake { private: bool sleepSwitch; public: property bool SleepSwitch { void set( bool value ) { sleepSwitch = value; } } StayAwake() { sleepSwitch = false; } 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." ); } } }; int main() { StayAwake^ stayAwake = gcnew StayAwake; Thread^ newThread = gcnew Thread( gcnew 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( "Main thread calls Interrupt on newThread." ); // Then tell newThread to go to sleep. stayAwake->SleepSwitch = true; // Wait for newThread to end. newThread->Join(); }
import System.*; import System.Security.Permissions.*; import System.Threading.*; import System.Threading.Thread; /** @assembly SecurityPermissionAttribute(SecurityAction.RequestMinimum, ControlThread = true) */ class ThreadInterrupt { public static void main(String[] args) { 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.set_SleepSwitch(true); // Wait for newThread to end. newThread.Join(); } //main } //ThredInterrupt class StayAwake { private boolean sleepSwitch = false; /** @property */ public void set_SleepSwitch(boolean value) { sleepSwitch = value; } //set_SleepSwitch public StayAwake() { } //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 - " + "nterrupted by main thread.")); } } //ThreadMethod } //StayAwake
System.Threading.Timeout
プラットフォーム
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
- Timeout クラスのページへのリンク