SignalObjectAndWait
[New
- Windows NT]
The SignalObjectAndWait
function allows the caller to atomically signal an object and wait on another
object.
BOOL SignalObjectAndWait(
|
HANDLE hObjectToSignal, |
// handle
of object to signal |
|
HANDLE hObjectToWaitOn, |
// handle
of object to wait for |
|
DWORD dwMilliseconds, |
// time-out
interval in milliseconds |
|
BOOL bAlertable |
//
alertable flag |
|
); |
|
Parameters
hObjectToSignal
Specifies the
handle to the object to signal. This object can be a semaphore, a mutex, or an
event. If the handle is a semaphore, SEMAPHORE_MODIFY_STATE access is required.
If the handle is an event, EVENT_MODIFY_STATE access is required. If the handle
is a mutex, SYNCHRONIZE access is assumed, because only the owner of a mutex
may release it. For more information, see Interprocess Synchronization
Objects.
hObjectToWaitOn
Specifies the
handle of the object to wait for. For a list of the object types whose handles
you can specify, see the Remarks section later in this topic.
dwMilliseconds
Specifies the
time-out interval, in milliseconds. The function returns if the interval
elapses, even if the object's state is nonsignaled and no completion or
asynchronous procedure call (APC) objects are queued. If dwMilliseconds
is zero, the function tests the object's state, checks for queued completion
routines or APCs, and returns immediately. If dwMilliseconds is
INFINITE, the function's time-out interval never elapses.
bAlertable
Specifies
whether the function returns when the system queues an I/O completion routine
or an APC for the calling thread. If TRUE, the function returns, and the thread
calls the completion routine or APC function. If FALSE, the function does not
return, and the thread does not call the completion routine or APC function.
Return Values
If the
function succeeds, the return value indicates the event that caused the
function to return.
If the
function fails, the return value is 0xFFFFFFFF. To get extended error
information, call GetLastError.
Upon success,
the return value is one of the following values:
|
Value |
Meaning |
|
WAIT_ABANDONED |
The
specified object is a mutex object that was not released by the thread that
owned the mutex object before the owning thread terminated. Ownership of the
mutex object is granted to the calling thread, and the mutex is set to
nonsignaled. |
|
WAIT_IO_COMPLETION |
One or more
I/O completion routines or user-mode APCs are queued for execution. |
|
WAIT_OBJECT_0 |
The state
of the specified object is signaled. |
|
WAIT_TIMEOUT |
The
time-out interval elapsed, and the object's state is nonsignaled. |
Remarks
A completion
routine is queued for execution when the ReadFileEx or WriteFileEx function in which it was
specified has been completed. The wait function returns and the completion
routine is executed only if bAlertable is TRUE, and the calling thread
is the thread that initiated the read or write operation.
The SignalObjectAndWait
function can wait for the following objects:
|
Object |
Description |
|
Change
notification |
The FindFirstChangeNotification function returns the
handle. The state of a change notification object is set to signaled when a
specified change occurs within a specified directory or directory tree. |
|
Console
input |
The handle
is returned by the CreateFile function when the CONIN$ value is specified, or by the
GetStdHandle
function. The state of the object is set to signaled when there is unread
input in the console's input buffer, and nonsignaled when the input buffer is
empty. |
|
Event |
The CreateEvent or OpenEvent function returns the
handle. The state of an event object is set explicitly to signaled by the SetEvent or PulseEvent function. The state of a
manual-reset event object must be reset explicitly to nonsignaled by the ResetEvent function. For an
auto-reset event object, the wait function resets the object state to
nonsignaled before returning. Event objects are also used in overlapped
operations, in which the state is set by the system. |
|
Mutex |
The CreateMutex or OpenMutex function returns the
handle. The state of a mutex object is signaled when it is not owned by any
thread. The wait function requests ownership of the mutex for the calling
thread, changing the mutex state to nonsignaled when ownership is granted. |
|
Process |
The CreateProcess or OpenProcess function returns the
handle. The state of a process object is signaled when the process
terminates. |
|
Semaphore |
The CreateSemaphore or OpenSemaphore function returns the
handle. A semaphore object maintains a count between zero and the maximum
count specified during its creation. Its state is set to signaled when its
count is greater than zero, and nonsignaled when its count is zero. If the
current state of the semaphore is signaled, the wait function decreases the
count by one. |
|
Thread |
The CreateProcess, CreateThread, or CreateRemoteThread function returns the
handle. The state of a thread object is signaled when the thread terminates. |
|
Timer |
The CreateWaitableTimer or OpenWaitableTimer function returns the
handle. Activate the timer by calling the SetWaitableTimer function. The state of an
active timer is signaled when it reaches its due time. Deactivate the timer
by calling the CancelWaitableTimer function. |
You have to
be careful when using the wait functions and DDE. If a thread creates any
windows, it must process messages. DDE sends messages to all windows in the
system. If you have a thread that uses a wait function with no time-out
interval, the system will deadlock. Therefore, if you have a thread that
creates windows, use MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx,
rather than SignalObjectAndWait.
See Also