ThreadPool.RegisterWaitForSingleObject ThreadPool.RegisterWaitForSingleObject ThreadPool.RegisterWaitForSingleObject ThreadPool.RegisterWaitForSingleObject Method

定義

WaitHandle を待機しているデリゲートを登録します。Registers a delegate that is waiting for a WaitHandle.

オーバーロード

RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)

32 ビット符号なし整数でミリ秒単位のタイムアウトを指定して、WaitHandle を待機するデリゲートを登録します。Registers a delegate to wait for a WaitHandle, specifying a 32-bit unsigned integer for the time-out in milliseconds.

RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)

TimeSpan 値をタイムアウトとして指定して、WaitHandle を待機するデリゲートを登録します。Registers a delegate to wait for a WaitHandle, specifying a TimeSpan value for the time-out.

RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)

ミリ秒単位のタイムアウトとして 32 ビット符号付き整数を指定して、WaitHandle を待機するデリゲートを登録します。Registers a delegate to wait for a WaitHandle, specifying a 32-bit signed integer for the time-out in milliseconds.

RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)

64 ビット符号付き整数でミリ秒単位のタイムアウトを指定して、WaitHandle を待機するデリゲートを登録します。Registers a delegate to wait for a WaitHandle, specifying a 64-bit signed integer for the time-out in milliseconds.

RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)

重要

この API は CLS 準拠ではありません。

32 ビット符号なし整数でミリ秒単位のタイムアウトを指定して、WaitHandle を待機するデリゲートを登録します。Registers a delegate to wait for a WaitHandle, specifying a 32-bit unsigned integer for the time-out in milliseconds.

public:
 static System::Threading::RegisteredWaitHandle ^ RegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, System::UInt32 millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
public static System.Threading.RegisteredWaitHandle RegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
static member RegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * uint32 * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function RegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As UInteger, executeOnlyOnce As Boolean) As RegisteredWaitHandle

パラメーター

waitObject
WaitHandle WaitHandle WaitHandle WaitHandle

登録する WaitHandleThe WaitHandle to register. Mutex 以外の WaitHandle を使用します。Use a WaitHandle other than Mutex.

callBack
WaitOrTimerCallback WaitOrTimerCallback WaitOrTimerCallback WaitOrTimerCallback

waitObject パラメーターがシグナル通知されたときに呼び出す WaitOrTimerCallback デリゲート。The WaitOrTimerCallback delegate to call when the waitObject parameter is signaled.

state
Object Object Object Object

デリゲートに渡されたオブジェクト。The object passed to the delegate.

millisecondsTimeOutInterval
UInt32 UInt32 UInt32 UInt32

ミリ秒単位のタイムアウト。The time-out in milliseconds. millisecondsTimeOutInterval パラメーターが 0 (ゼロ) の場合、関数はオブジェクトの状態をテストして、すぐに制御を戻します。If the millisecondsTimeOutInterval parameter is 0 (zero), the function tests the object's state and returns immediately. millisecondsTimeOutInterval が -1 の場合、関数はタイムアウトしません。If millisecondsTimeOutInterval is -1, the function's time-out interval never elapses.

executeOnlyOnce
Boolean Boolean Boolean Boolean

デリゲートの呼び出し後、スレッドが waitObject パラメーターを待機しなくなる場合は true。待機が登録解除されるまでは、待機操作が完了するたびにタイマーをリセットする場合は falsetrue to indicate that the thread will no longer wait on the waitObject parameter after the delegate has been called; false to indicate that the timer is reset every time the wait operation completes until the wait is unregistered.

戻り値

登録された待機操作をキャンセルするために使用できる RegisteredWaitHandleThe RegisteredWaitHandle that can be used to cancel the registered wait operation.

例外

millisecondsTimeOutInterval パラメーターが -1 未満。The millisecondsTimeOutInterval parameter is less than -1.

次の例は、使用する方法を示します、RegisterWaitForSingleObject指定した待機ハンドルがシグナル通知されたときに、指定されたコールバック メソッドを実行するメソッド。The following example shows how to use the RegisterWaitForSingleObject method to execute a specified callback method when a specified wait handle is signaled. この例では、コールバック メソッドはWaitProc、待機ハンドルがあり、AutoResetEventします。In this example, the callback method is WaitProc, and the wait handle is an AutoResetEvent.

例では、定義、TaskInfoを実行するときに、コールバックに渡される情報を保持するクラス。The example defines a TaskInfo class to hold the information that is passed to the callback when it executes. 例は、作成、TaskInfoオブジェクトし、文字列データを割り当てます。The example creates a TaskInfo object and assigns it some string data. RegisteredWaitHandleによって返される、RegisterWaitForSingleObjectに割り当てられているメソッド、Handleのフィールド、TaskInfoオブジェクトをコールバック メソッドへのアクセスを持つよう、RegisteredWaitHandleします。The RegisteredWaitHandle that is returned by the RegisterWaitForSingleObject method is assigned to the Handle field of the TaskInfo object so that the callback method has access to the RegisteredWaitHandle.

指定するだけでなくTaskInfoへの呼び出し、コールバック メソッドに渡すためにオブジェクトとして、RegisterWaitForSingleObjectメソッドを指定します、 AutoResetEvent 、タスクが待機する、WaitOrTimerCallbackを表すデリゲート、WaitProcコールバック メソッド、1 秒のタイムアウト間隔、および複数のコールバック。In addition to specifying TaskInfo as the object to pass to the callback method, the call to the RegisterWaitForSingleObject method specifies the AutoResetEvent that the task will wait for, a WaitOrTimerCallback delegate that represents the WaitProc callback method, a one second time-out interval, and multiple callbacks.

メイン スレッドに通知すると、AutoResetEventを呼び出してそのSetメソッド、WaitOrTimerCallbackデリゲートが呼び出されます。When the main thread signals the AutoResetEvent by calling its Set method, the WaitOrTimerCallback delegate is invoked. WaitProcメソッド テストRegisteredWaitHandleタイムアウトが発生したかどうかを判断します。The WaitProc method tests RegisteredWaitHandle to determine whether a time-out occurred. 待機ハンドルがシグナル通知されたため、コールバックが呼び出された場合、WaitProcメソッドの登録を解除、RegisteredWaitHandleコールバックの追加を停止しています。If the callback was invoked because the wait handle was signaled, the WaitProc method unregisters the RegisteredWaitHandle, stopping additional callbacks. タイムアウトの場合は、タスクが待機する続けます。In the case of a time-out, the task continues to wait. WaitProcメソッドは、コンソールにメッセージを出力することによって終了します。The WaitProc method ends by printing a message to the console.

using namespace System;
using namespace System::Threading;

// TaskInfo contains data that will be passed to the callback
// method.
public ref class TaskInfo
{
public:
   TaskInfo()
   {
      Handle = nullptr;
      OtherInfo = "default";
   }

   RegisteredWaitHandle^ Handle;
   String^ OtherInfo;
};

ref class Example
{
public:

   // The callback method executes when the registered wait times out,
   // or when the WaitHandle (in this case AutoResetEvent) is signaled.
   // WaitProc unregisters the WaitHandle the first time the event is 
   // signaled.
   static void WaitProc( Object^ state, bool timedOut )
   {
      
      // The state Object must be cast to the correct type, because the
      // signature of the WaitOrTimerCallback delegate specifies type
      // Object.
      TaskInfo^ ti = static_cast<TaskInfo^>(state);
      String^ cause = "TIMED OUT";
      if (  !timedOut )
      {
         cause = "SIGNALED";
         
         // If the callback method executes because the WaitHandle is
         // signaled, stop future execution of the callback method
         // by unregistering the WaitHandle.
         if ( ti->Handle != nullptr )
                  ti->Handle->Unregister( nullptr );
      }

      Console::WriteLine( "WaitProc( {0}) executes on thread {1}; cause = {2}.", ti->OtherInfo, Thread::CurrentThread->GetHashCode(), cause );
   }

};

int main()
{
   
   // The main thread uses AutoResetEvent to signal the
   // registered wait handle, which executes the callback
   // method.
   AutoResetEvent^ ev = gcnew AutoResetEvent( false );
   TaskInfo^ ti = gcnew TaskInfo;
   ti->OtherInfo = "First task";
   
   // The TaskInfo for the task includes the registered wait
   // handle returned by RegisterWaitForSingleObject.  This
   // allows the wait to be terminated when the object has
   // been signaled once (see WaitProc).
   ti->Handle = ThreadPool::RegisterWaitForSingleObject( ev, gcnew WaitOrTimerCallback( Example::WaitProc ), ti, 1000, false );
   
   // The main thread waits three seconds, to demonstrate the
   // time-outs on the queued thread, and then signals.
   Thread::Sleep( 3100 );
   Console::WriteLine( "Main thread signals." );
   ev->Set();
   
   // The main thread sleeps, which should give the callback
   // method time to execute.  If you comment out this line, the
   // program usually ends before the ThreadPool thread can execute.
   Thread::Sleep( 1000 );
   
   // If you start a thread yourself, you can wait for it to end
   // by calling Thread::Join.  This option is not available with 
   // thread pool threads.
   return 0;
}

using System;
using System.Threading;

// TaskInfo contains data that will be passed to the callback
// method.
public class TaskInfo {
    public RegisteredWaitHandle Handle = null;
    public string OtherInfo = "default";
}

public class Example {
    public static void Main(string[] args) {
        // The main thread uses AutoResetEvent to signal the
        // registered wait handle, which executes the callback
        // method.
        AutoResetEvent ev = new AutoResetEvent(false);

        TaskInfo ti = new TaskInfo();
        ti.OtherInfo = "First task";
        // The TaskInfo for the task includes the registered wait
        // handle returned by RegisterWaitForSingleObject.  This
        // allows the wait to be terminated when the object has
        // been signaled once (see WaitProc).
        ti.Handle = ThreadPool.RegisterWaitForSingleObject(
            ev,
            new WaitOrTimerCallback(WaitProc),
            ti,
            1000,
            false
        );

        // The main thread waits three seconds, to demonstrate the
        // time-outs on the queued thread, and then signals.
        Thread.Sleep(3100);
        Console.WriteLine("Main thread signals.");
        ev.Set();

        // The main thread sleeps, which should give the callback
        // method time to execute.  If you comment out this line, the
        // program usually ends before the ThreadPool thread can execute.
        Thread.Sleep(1000);
        // If you start a thread yourself, you can wait for it to end
        // by calling Thread.Join.  This option is not available with 
        // thread pool threads.
    }
   
    // The callback method executes when the registered wait times out,
    // or when the WaitHandle (in this case AutoResetEvent) is signaled.
    // WaitProc unregisters the WaitHandle the first time the event is 
    // signaled.
    public static void WaitProc(object state, bool timedOut) {
        // The state object must be cast to the correct type, because the
        // signature of the WaitOrTimerCallback delegate specifies type
        // Object.
        TaskInfo ti = (TaskInfo) state;

        string cause = "TIMED OUT";
        if (!timedOut) {
            cause = "SIGNALED";
            // If the callback method executes because the WaitHandle is
            // signaled, stop future execution of the callback method
            // by unregistering the WaitHandle.
            if (ti.Handle != null)
                ti.Handle.Unregister(null);
        } 

        Console.WriteLine("WaitProc( {0} ) executes on thread {1}; cause = {2}.",
            ti.OtherInfo, 
            Thread.CurrentThread.GetHashCode().ToString(), 
            cause
        );
    }
}
Imports System
Imports System.Threading

' TaskInfo contains data that will be passed to the callback
' method.
Public Class TaskInfo
    public Handle As RegisteredWaitHandle = Nothing
    public OtherInfo As String = "default"
End Class

Public Class Example

    <MTAThread> _
    Public Shared Sub Main()
        ' The main thread uses AutoResetEvent to signal the
        ' registered wait handle, which executes the callback
        ' method.
        Dim ev As New AutoResetEvent(false)

        Dim ti As New TaskInfo()
        ti.OtherInfo = "First task"
        ' The TaskInfo for the task includes the registered wait
        ' handle returned by RegisterWaitForSingleObject.  This
        ' allows the wait to be terminated when the object has
        ' been signaled once (see WaitProc).
        ti.Handle = ThreadPool.RegisterWaitForSingleObject( _
            ev, _
            New WaitOrTimerCallback(AddressOf WaitProc), _
            ti, _
            1000, _
            false _
        )

        ' The main thread waits about three seconds, to demonstrate 
        ' the time-outs on the queued task, and then signals.
        Thread.Sleep(3100)
        Console.WriteLine("Main thread signals.")
        ev.Set()

        ' The main thread sleeps, which should give the callback
        ' method time to execute.  If you comment out this line, the
        ' program usually ends before the ThreadPool thread can execute.
        Thread.Sleep(1000)
        ' If you start a thread yourself, you can wait for it to end
        ' by calling Thread.Join.  This option is not available with 
        ' thread pool threads.
    End Sub
   
    ' The callback method executes when the registered wait times out,
    ' or when the WaitHandle (in this case AutoResetEvent) is signaled.
    ' WaitProc unregisters the WaitHandle the first time the event is 
    ' signaled.
    Public Shared Sub WaitProc(state As Object, timedOut As Boolean)
        ' The state object must be cast to the correct type, because the
        ' signature of the WaitOrTimerCallback delegate specifies type
        ' Object.
        Dim ti As TaskInfo = CType(state, TaskInfo)

        Dim cause As String = "TIMED OUT"
        If Not timedOut Then
            cause = "SIGNALED"
            ' If the callback method executes because the WaitHandle is
            ' signaled, stop future execution of the callback method
            ' by unregistering the WaitHandle.
            If Not ti.Handle Is Nothing Then
                ti.Handle.Unregister(Nothing)
            End If
        End If 

        Console.WriteLine("WaitProc( {0} ) executes on thread {1}; cause = {2}.", _
            ti.OtherInfo, _
            Thread.CurrentThread.GetHashCode().ToString(), _
            cause _
        )
    End Sub
End Class

注釈

完了したらを使用して、RegisteredWaitHandleこのメソッドによって返される、呼び出しのRegisteredWaitHandle.Unregister待機ハンドルへの参照を解放します。When you are finished using the RegisteredWaitHandle that is returned by this method, call its RegisteredWaitHandle.Unregister method to release references to the wait handle. 常に呼び出すことをお勧め、RegisteredWaitHandle.Unregisterメソッドを指定する場合でもtrueexecuteOnlyOnceします。We recommend that you always call the RegisteredWaitHandle.Unregister method, even if you specify true for executeOnlyOnce. ガベージ コレクションの詳細は効率的に動作を呼び出す場合、RegisteredWaitHandle.Unregisterメソッドの代わりに、登録済みの待機ハンドルのファイナライザーによって異なります。Garbage collection works more efficiently if you call the RegisteredWaitHandle.Unregister method instead of depending on the registered wait handle's finalizer.

RegisterWaitForSingleObjectメソッドがスレッド プールに指定したデリゲートをキューします。The RegisterWaitForSingleObject method queues the specified delegate to the thread pool. 次のいずれかが発生すると、ワーカー スレッドは、デリゲートを実行します。A worker thread will execute the delegate when one of the following occurs:

  • 指定したオブジェクトはシグナルの状態です。The specified object is in the signaled state.

  • タイムアウト間隔が経過しました。The time-out interval elapses.

RegisterWaitForSingleObjectメソッドは、指定したオブジェクトの現在の状態を確認します。WaitHandleします。The RegisterWaitForSingleObject method checks the current state of the specified object's WaitHandle. オブジェクトの状態が通知されていない場合、メソッドは、待機操作を登録します。If the object's state is unsignaled, the method registers a wait operation. 待機操作は、スレッド プールのスレッドによって実行されます。The wait operation is performed by a thread from the thread pool. デリゲートは、オブジェクトの状態がシグナル状態またはタイムアウト間隔が経過すると、ワーカー スレッドによって実行されます。The delegate is executed by a worker thread when the object's state becomes signaled or the time-out interval elapses. 場合、timeOutIntervalパラメーターが 0 (ゼロ) とexecuteOnlyOnceパラメーターがfalseイベントがシグナル状態またはタイムアウト間隔が経過するたびに、タイマーがリセットされます。If the timeOutInterval parameter is not 0 (zero) and the executeOnlyOnce parameter is false, the timer is reset every time the event is signaled or the time-out interval elapses.

重要

使用して、MutexwaitObject基になる Windows API は、既定値を使用するためのコールバックに対する相互排除を行いませんWT_EXECUTEDEFAULTフラグ、個別のスレッド プールのスレッドで各コールバックがディスパッチされるようにします。Using a Mutex for waitObject does not provide mutual exclusion for the callbacks because the underlying Windows API uses the default WT_EXECUTEDEFAULT flag, so each callback is dispatched on a separate thread pool thread. 代わりに、Mutexを使用して、 Semaphore 1 の最大数。Instead of a Mutex, use a Semaphore with a maximum count of 1.

待機操作をキャンセルする、RegisteredWaitHandle.Unregisterメソッド。To cancel the wait operation, call the RegisteredWaitHandle.Unregister method.

待機スレッドが Win32 を使用してWaitForMultipleObjects登録済みの待機操作を監視する関数。The wait thread uses the Win32 WaitForMultipleObjects function to monitor registered wait operations. そのため、同じネイティブのオペレーティング システム ハンドルを使用する場合を複数回呼び出すRegisterWaitForSingleObject、Win32 を使用してハンドルを複製する必要がありますDuplicateHandle関数。Therefore, if you must use the same native operating system handle in multiple calls to RegisterWaitForSingleObject, you must duplicate the handle using the Win32 DuplicateHandle function. 渡されたイベント オブジェクトをしないパルスする必要がありますに注意してください。RegisterWaitForSingleObject待機スレッドでイベントがシグナル状態にリセットされます。 前に、検出されないためです。Note that you should not pulse an event object passed to RegisterWaitForSingleObject, because the wait thread might not detect that the event is signaled before it is reset.

関数は、戻る前に、一部の種類の同期オブジェクトの状態を変更します。Before returning, the function modifies the state of some types of synchronization objects. 変更は、オブジェクトがシグナル状態の原因となった待機条件を満たす場合にのみ発生します。Modification occurs only for the object whose signaled state caused the wait condition to be satisfied. たとえば、セマフォのカウントは 1 つ減少します。For example, the count of a semaphore is decreased by one.

バージョン情報Version Information

.NET Framework バージョン 2.0 以降、Thread.CurrentPrincipalプロパティの値はワーカー スレッドに反映を使用してキューに置かれた、RegisterWaitForSingleObjectメソッド。Starting with the .NET Framework version 2.0, the Thread.CurrentPrincipal property value is propagated to worker threads queued using the RegisterWaitForSingleObject method. 以前のバージョンでは、プリンシパルの情報は反映されません。In earlier versions, the principal information is not propagated.

こちらもご覧ください

RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)

TimeSpan 値をタイムアウトとして指定して、WaitHandle を待機するデリゲートを登録します。Registers a delegate to wait for a WaitHandle, specifying a TimeSpan value for the time-out.

public:
 static System::Threading::RegisteredWaitHandle ^ RegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, TimeSpan timeout, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle RegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, TimeSpan timeout, bool executeOnlyOnce);
static member RegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * TimeSpan * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function RegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, timeout As TimeSpan, executeOnlyOnce As Boolean) As RegisteredWaitHandle

パラメーター

waitObject
WaitHandle WaitHandle WaitHandle WaitHandle

登録する WaitHandleThe WaitHandle to register. Mutex 以外の WaitHandle を使用します。Use a WaitHandle other than Mutex.

callBack
WaitOrTimerCallback WaitOrTimerCallback WaitOrTimerCallback WaitOrTimerCallback

waitObject パラメーターがシグナル通知されたときに呼び出す WaitOrTimerCallback デリゲート。The WaitOrTimerCallback delegate to call when the waitObject parameter is signaled.

state
Object Object Object Object

デリゲートに渡されたオブジェクト。The object passed to the delegate.

timeout
TimeSpan TimeSpan TimeSpan TimeSpan

TimeSpan で表されるタイムアウト。The time-out represented by a TimeSpan. timeout が 0 (ゼロ) の場合、関数はオブジェクトの状態をテストして、すぐに制御を戻します。If timeout is 0 (zero), the function tests the object's state and returns immediately. timeout が -1 の場合、関数はタイムアウトしません。If timeout is -1, the function's time-out interval never elapses.

executeOnlyOnce
Boolean Boolean Boolean Boolean

デリゲートの呼び出し後、スレッドが waitObject パラメーターを待機しなくなる場合は true。待機が登録解除されるまでは、待機操作が完了するたびにタイマーをリセットする場合は falsetrue to indicate that the thread will no longer wait on the waitObject parameter after the delegate has been called; false to indicate that the timer is reset every time the wait operation completes until the wait is unregistered.

戻り値

ネイティブ ハンドルをカプセル化する RegisteredWaitHandleThe RegisteredWaitHandle that encapsulates the native handle.

例外

timeout パラメーターが -1 未満。The timeout parameter is less than -1.

timeout パラメーターが MaxValue より大きい値です。The timeout parameter is greater than MaxValue.

注釈

完了したらを使用して、RegisteredWaitHandleこのメソッドによって返される、呼び出しのRegisteredWaitHandle.Unregister待機ハンドルへの参照を解放します。When you are finished using the RegisteredWaitHandle that is returned by this method, call its RegisteredWaitHandle.Unregister method to release references to the wait handle. 常に呼び出すことをお勧め、RegisteredWaitHandle.Unregisterメソッドを指定する場合でもtrueexecuteOnlyOnceします。We recommend that you always call the RegisteredWaitHandle.Unregister method, even if you specify true for executeOnlyOnce. ガベージ コレクションの詳細は効率的に動作を呼び出す場合、RegisteredWaitHandle.Unregisterメソッドの代わりに、登録済みの待機ハンドルのファイナライザーによって異なります。Garbage collection works more efficiently if you call the RegisteredWaitHandle.Unregister method instead of depending on the registered wait handle's finalizer.

RegisterWaitForSingleObjectメソッドがスレッド プールに指定したデリゲートをキューします。The RegisterWaitForSingleObject method queues the specified delegate to the thread pool. 次のいずれかが発生すると、ワーカー スレッドは、デリゲートを実行します。A worker thread will execute the delegate when one of the following occurs:

  • 指定したオブジェクトはシグナルの状態です。The specified object is in the signaled state.

  • タイムアウト間隔が経過しました。The time-out interval elapses.

RegisterWaitForSingleObjectメソッドは、指定したオブジェクトの現在の状態を確認します。WaitHandleします。The RegisterWaitForSingleObject method checks the current state of the specified object's WaitHandle. オブジェクトの状態が通知されていない場合、メソッドは、待機操作を登録します。If the object's state is unsignaled, the method registers a wait operation. 待機操作は、スレッド プールのスレッドによって実行されます。The wait operation is performed by a thread from the thread pool. デリゲートは、オブジェクトの状態がシグナル状態またはタイムアウト間隔が経過すると、ワーカー スレッドによって実行されます。The delegate is executed by a worker thread when the object's state becomes signaled or the time-out interval elapses. 場合、timeOutIntervalパラメーターが 0 (ゼロ) とexecuteOnlyOnceパラメーターがfalseイベントがシグナル状態またはタイムアウト間隔が経過するたびに、タイマーがリセットされます。If the timeOutInterval parameter is not 0 (zero) and the executeOnlyOnce parameter is false, the timer is reset every time the event is signaled or the time-out interval elapses.

重要

使用して、MutexwaitObject基になる Windows API は、既定値を使用するためのコールバックに対する相互排除を行いませんWT_EXECUTEDEFAULTフラグ、個別のスレッド プールのスレッドで各コールバックがディスパッチされるようにします。Using a Mutex for waitObject does not provide mutual exclusion for the callbacks because the underlying Windows API uses the default WT_EXECUTEDEFAULT flag, so each callback is dispatched on a separate thread pool thread. 代わりに、Mutexを使用して、 Semaphore 1 の最大数。Instead of a Mutex, use a Semaphore with a maximum count of 1.

待機操作をキャンセルする、RegisteredWaitHandle.Unregisterメソッド。To cancel the wait operation, call the RegisteredWaitHandle.Unregister method.

待機スレッドが Win32 を使用してWaitForMultipleObjects登録済みの待機操作を監視する関数。The wait thread uses the Win32 WaitForMultipleObjects function to monitor registered wait operations. そのため、同じネイティブのオペレーティング システム ハンドルを使用する場合を複数回呼び出すRegisterWaitForSingleObject、Win32 を使用してハンドルを複製する必要がありますDuplicateHandle関数。Therefore, if you must use the same native operating system handle in multiple calls to RegisterWaitForSingleObject, you must duplicate the handle using the Win32 DuplicateHandle function. 渡されたイベント オブジェクトをしないパルスする必要がありますに注意してください。RegisterWaitForSingleObject待機スレッドでイベントがシグナル状態にリセットされます。 前に、検出されないためです。Note that you should not pulse an event object passed to RegisterWaitForSingleObject, because the wait thread might not detect that the event is signaled before it is reset.

関数は、戻る前に、一部の種類の同期オブジェクトの状態を変更します。Before returning, the function modifies the state of some types of synchronization objects. 変更は、オブジェクトがシグナル状態の原因となった待機条件を満たす場合にのみ発生します。Modification occurs only for the object whose signaled state caused the wait condition to be satisfied. たとえば、セマフォのカウントは 1 つ減少します。For example, the count of a semaphore is decreased by one.

バージョン情報Version Information

.NET Framework バージョン 2.0 以降、Thread.CurrentPrincipalプロパティの値はワーカー スレッドに反映を使用してキューに置かれた、RegisterWaitForSingleObjectメソッド。Starting with the .NET Framework version 2.0, the Thread.CurrentPrincipal property value is propagated to worker threads queued using the RegisterWaitForSingleObject method. 以前のバージョンでは、プリンシパルの情報は反映されません。In earlier versions, the principal information is not propagated.

こちらもご覧ください

RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)

ミリ秒単位のタイムアウトとして 32 ビット符号付き整数を指定して、WaitHandle を待機するデリゲートを登録します。Registers a delegate to wait for a WaitHandle, specifying a 32-bit signed integer for the time-out in milliseconds.

public:
 static System::Threading::RegisteredWaitHandle ^ RegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle RegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
static member RegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function RegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As Integer, executeOnlyOnce As Boolean) As RegisteredWaitHandle

パラメーター

waitObject
WaitHandle WaitHandle WaitHandle WaitHandle

登録する WaitHandleThe WaitHandle to register. Mutex 以外の WaitHandle を使用します。Use a WaitHandle other than Mutex.

callBack
WaitOrTimerCallback WaitOrTimerCallback WaitOrTimerCallback WaitOrTimerCallback

waitObject パラメーターがシグナル通知されたときに呼び出す WaitOrTimerCallback デリゲート。The WaitOrTimerCallback delegate to call when the waitObject parameter is signaled.

state
Object Object Object Object

デリゲートに渡されるオブジェクト。The object that is passed to the delegate.

millisecondsTimeOutInterval
Int32 Int32 Int32 Int32

ミリ秒単位のタイムアウト。The time-out in milliseconds. millisecondsTimeOutInterval パラメーターが 0 (ゼロ) の場合、関数はオブジェクトの状態をテストして、すぐに制御を戻します。If the millisecondsTimeOutInterval parameter is 0 (zero), the function tests the object's state and returns immediately. millisecondsTimeOutInterval が -1 の場合、関数はタイムアウトしません。If millisecondsTimeOutInterval is -1, the function's time-out interval never elapses.

executeOnlyOnce
Boolean Boolean Boolean Boolean

デリゲートの呼び出し後、スレッドが waitObject パラメーターを待機しなくなる場合は true。待機が登録解除されるまでは、待機操作が完了するたびにタイマーをリセットする場合は falsetrue to indicate that the thread will no longer wait on the waitObject parameter after the delegate has been called; false to indicate that the timer is reset every time the wait operation completes until the wait is unregistered.

戻り値

ネイティブ ハンドルをカプセル化する RegisteredWaitHandleThe RegisteredWaitHandle that encapsulates the native handle.

例外

millisecondsTimeOutInterval パラメーターが -1 未満。The millisecondsTimeOutInterval parameter is less than -1.

注釈

完了したらを使用して、RegisteredWaitHandleこのメソッドによって返される、呼び出しのRegisteredWaitHandle.Unregister待機ハンドルへの参照を解放します。When you are finished using the RegisteredWaitHandle that is returned by this method, call its RegisteredWaitHandle.Unregister method to release references to the wait handle. 常に呼び出すことをお勧め、RegisteredWaitHandle.Unregisterメソッドを指定する場合でもtrueexecuteOnlyOnceします。We recommend that you always call the RegisteredWaitHandle.Unregister method, even if you specify true for executeOnlyOnce. ガベージ コレクションの詳細は効率的に動作を呼び出す場合、RegisteredWaitHandle.Unregisterメソッドの代わりに、登録済みの待機ハンドルのファイナライザーによって異なります。Garbage collection works more efficiently if you call the RegisteredWaitHandle.Unregister method instead of depending on the registered wait handle's finalizer.

RegisterWaitForSingleObjectメソッドがスレッド プールに指定したデリゲートをキューします。The RegisterWaitForSingleObject method queues the specified delegate to the thread pool. 次のいずれかが発生すると、ワーカー スレッドは、デリゲートを実行します。A worker thread will execute the delegate when one of the following occurs:

  • 指定したオブジェクトはシグナルの状態です。The specified object is in the signaled state.

  • タイムアウト間隔が経過しました。The time-out interval elapses.

RegisterWaitForSingleObjectメソッドは、指定したオブジェクトの現在の状態を確認します。WaitHandleします。The RegisterWaitForSingleObject method checks the current state of the specified object's WaitHandle. オブジェクトの状態が通知されていない場合、メソッドは、待機操作を登録します。If the object's state is unsignaled, the method registers a wait operation. 待機操作は、スレッド プールのスレッドによって実行されます。The wait operation is performed by a thread from the thread pool. デリゲートは、オブジェクトの状態がシグナル状態またはタイムアウト間隔が経過すると、ワーカー スレッドによって実行されます。The delegate is executed by a worker thread when the object's state becomes signaled or the time-out interval elapses. 場合、timeOutIntervalパラメーターが 0 (ゼロ) とexecuteOnlyOnceパラメーターがfalseイベントがシグナル状態またはタイムアウト間隔が経過するたびに、タイマーがリセットされます。If the timeOutInterval parameter is not 0 (zero) and the executeOnlyOnce parameter is false, the timer is reset every time the event is signaled or the time-out interval elapses.

重要

使用して、MutexwaitObject基になる Windows API は、既定値を使用するためのコールバックに対する相互排除を行いませんWT_EXECUTEDEFAULTフラグ、個別のスレッド プールのスレッドで各コールバックがディスパッチされるようにします。Using a Mutex for waitObject does not provide mutual exclusion for the callbacks because the underlying Windows API uses the default WT_EXECUTEDEFAULT flag, so each callback is dispatched on a separate thread pool thread. 代わりに、Mutexを使用して、 Semaphore 1 の最大数。Instead of a Mutex, use a Semaphore with a maximum count of 1.

待機操作をキャンセルする、RegisteredWaitHandle.Unregisterメソッド。To cancel the wait operation, call the RegisteredWaitHandle.Unregister method.

待機スレッドが Win32 を使用してWaitForMultipleObjects登録済みの待機操作を監視する関数。The wait thread uses the Win32 WaitForMultipleObjects function to monitor registered wait operations. そのため、同じネイティブのオペレーティング システム ハンドルを使用する場合を複数回呼び出すRegisterWaitForSingleObject、Win32 を使用してハンドルを複製する必要がありますDuplicateHandle関数。Therefore, if you must use the same native operating system handle in multiple calls to RegisterWaitForSingleObject, you must duplicate the handle using the Win32 DuplicateHandle function. 渡されたイベント オブジェクトをしないパルスする必要がありますに注意してください。RegisterWaitForSingleObject待機スレッドでイベントがシグナル状態にリセットされます。 前に、検出されないためです。Note that you should not pulse an event object passed to RegisterWaitForSingleObject, because the wait thread might not detect that the event is signaled before it is reset.

関数は、戻る前に、一部の種類の同期オブジェクトの状態を変更します。Before returning, the function modifies the state of some types of synchronization objects. 変更は、オブジェクトがシグナル状態の原因となった待機条件を満たす場合にのみ発生します。Modification occurs only for the object whose signaled state caused the wait condition to be satisfied. たとえば、セマフォのカウントは 1 つ減少します。For example, the count of a semaphore is decreased by one.

バージョン情報Version Information

.NET Framework バージョン 2.0 以降、Thread.CurrentPrincipalプロパティの値はワーカー スレッドに反映を使用してキューに置かれた、RegisterWaitForSingleObjectメソッド。Starting with the .NET Framework version 2.0, the Thread.CurrentPrincipal property value is propagated to worker threads queued using the RegisterWaitForSingleObject method. 以前のバージョンでは、プリンシパルの情報は反映されません。In earlier versions, the principal information is not propagated.

こちらもご覧ください

RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)

64 ビット符号付き整数でミリ秒単位のタイムアウトを指定して、WaitHandle を待機するデリゲートを登録します。Registers a delegate to wait for a WaitHandle, specifying a 64-bit signed integer for the time-out in milliseconds.

public:
 static System::Threading::RegisteredWaitHandle ^ RegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle RegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
static member RegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int64 * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function RegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As Long, executeOnlyOnce As Boolean) As RegisteredWaitHandle

パラメーター

waitObject
WaitHandle WaitHandle WaitHandle WaitHandle

登録する WaitHandleThe WaitHandle to register. Mutex 以外の WaitHandle を使用します。Use a WaitHandle other than Mutex.

callBack
WaitOrTimerCallback WaitOrTimerCallback WaitOrTimerCallback WaitOrTimerCallback

waitObject パラメーターがシグナル通知されたときに呼び出す WaitOrTimerCallback デリゲート。The WaitOrTimerCallback delegate to call when the waitObject parameter is signaled.

state
Object Object Object Object

デリゲートに渡されたオブジェクト。The object passed to the delegate.

millisecondsTimeOutInterval
Int64 Int64 Int64 Int64

ミリ秒単位のタイムアウト。The time-out in milliseconds. millisecondsTimeOutInterval パラメーターが 0 (ゼロ) の場合、関数はオブジェクトの状態をテストして、すぐに制御を戻します。If the millisecondsTimeOutInterval parameter is 0 (zero), the function tests the object's state and returns immediately. millisecondsTimeOutInterval が -1 の場合、関数はタイムアウトしません。If millisecondsTimeOutInterval is -1, the function's time-out interval never elapses.

executeOnlyOnce
Boolean Boolean Boolean Boolean

デリゲートの呼び出し後、スレッドが waitObject パラメーターを待機しなくなる場合は true。待機が登録解除されるまでは、待機操作が完了するたびにタイマーをリセットする場合は falsetrue to indicate that the thread will no longer wait on the waitObject parameter after the delegate has been called; false to indicate that the timer is reset every time the wait operation completes until the wait is unregistered.

戻り値

ネイティブ ハンドルをカプセル化する RegisteredWaitHandleThe RegisteredWaitHandle that encapsulates the native handle.

例外

millisecondsTimeOutInterval パラメーターが -1 未満。The millisecondsTimeOutInterval parameter is less than -1.

注釈

完了したらを使用して、RegisteredWaitHandleこのメソッドによって返される、呼び出しのRegisteredWaitHandle.Unregister待機ハンドルへの参照を解放します。When you are finished using the RegisteredWaitHandle that is returned by this method, call its RegisteredWaitHandle.Unregister method to release references to the wait handle. 常に呼び出すことをお勧め、RegisteredWaitHandle.Unregisterメソッドを指定する場合でもtrueexecuteOnlyOnceします。We recommend that you always call the RegisteredWaitHandle.Unregister method, even if you specify true for executeOnlyOnce. ガベージ コレクションの詳細は効率的に動作を呼び出す場合、RegisteredWaitHandle.Unregisterメソッドの代わりに、登録済みの待機ハンドルのファイナライザーによって異なります。Garbage collection works more efficiently if you call the RegisteredWaitHandle.Unregister method instead of depending on the registered wait handle's finalizer.

RegisterWaitForSingleObjectメソッドがスレッド プールに指定したデリゲートをキューします。The RegisterWaitForSingleObject method queues the specified delegate to the thread pool. 次のいずれかが発生すると、ワーカー スレッドは、デリゲートを実行します。A worker thread will execute the delegate when one of the following occurs:

  • 指定したオブジェクトはシグナルの状態です。The specified object is in the signaled state.

  • タイムアウト間隔が経過しました。The time-out interval elapses.

RegisterWaitForSingleObjectメソッドは、指定したオブジェクトの現在の状態を確認します。WaitHandleします。The RegisterWaitForSingleObject method checks the current state of the specified object's WaitHandle. オブジェクトの状態が通知されていない場合、メソッドは、待機操作を登録します。If the object's state is unsignaled, the method registers a wait operation. 待機操作は、スレッド プールのスレッドによって実行されます。The wait operation is performed by a thread from the thread pool. デリゲートは、オブジェクトの状態がシグナル状態またはタイムアウト間隔が経過すると、ワーカー スレッドによって実行されます。The delegate is executed by a worker thread when the object's state becomes signaled or the time-out interval elapses. 場合、timeOutIntervalパラメーターが 0 (ゼロ) とexecuteOnlyOnceパラメーターがfalseイベントがシグナル状態またはタイムアウト間隔が経過するたびに、タイマーがリセットされます。If the timeOutInterval parameter is not 0 (zero) and the executeOnlyOnce parameter is false, the timer is reset every time the event is signaled or the time-out interval elapses.

重要

使用して、MutexwaitObject基になる Windows API は、既定値を使用するためのコールバックに対する相互排除を行いませんWT_EXECUTEDEFAULTフラグ、個別のスレッド プールのスレッドで各コールバックがディスパッチされるようにします。Using a Mutex for waitObject does not provide mutual exclusion for the callbacks because the underlying Windows API uses the default WT_EXECUTEDEFAULT flag, so each callback is dispatched on a separate thread pool thread. 代わりに、Mutexを使用して、 Semaphore 1 の最大数。Instead of a Mutex, use a Semaphore with a maximum count of 1.

待機操作をキャンセルする、RegisteredWaitHandle.Unregisterメソッド。To cancel the wait operation, call the RegisteredWaitHandle.Unregister method.

待機スレッドが Win32 を使用してWaitForMultipleObjects登録済みの待機操作を監視する関数。The wait thread uses the Win32 WaitForMultipleObjects function to monitor registered wait operations. そのため、同じネイティブのオペレーティング システム ハンドルを使用する場合を複数回呼び出すRegisterWaitForSingleObject、Win32 を使用してハンドルを複製する必要がありますDuplicateHandle関数。Therefore, if you must use the same native operating system handle in multiple calls to RegisterWaitForSingleObject, you must duplicate the handle using the Win32 DuplicateHandle function. 渡されたイベント オブジェクトをしないパルスする必要がありますに注意してください。RegisterWaitForSingleObject待機スレッドでイベントがシグナル状態にリセットされます。 前に、検出されないためです。Note that you should not pulse an event object passed to RegisterWaitForSingleObject, because the wait thread might not detect that the event is signaled before it is reset.

関数は、戻る前に、一部の種類の同期オブジェクトの状態を変更します。Before returning, the function modifies the state of some types of synchronization objects. 変更は、オブジェクトがシグナル状態の原因となった待機条件を満たす場合にのみ発生します。Modification occurs only for the object whose signaled state caused the wait condition to be satisfied. たとえば、セマフォのカウントは 1 つ減少します。For example, the count of a semaphore is decreased by one.

バージョン情報Version Information

.NET Framework バージョン 2.0 以降、Thread.CurrentPrincipalプロパティの値はワーカー スレッドに反映を使用してキューに置かれた、RegisterWaitForSingleObjectメソッド。Starting with the .NET Framework version 2.0, the Thread.CurrentPrincipal property value is propagated to worker threads queued using the RegisterWaitForSingleObject method. 以前のバージョンでは、プリンシパルの情報は反映されません。In earlier versions, the principal information is not propagated.

こちらもご覧ください

適用対象