, , (condition variable model, CV model), (signal) (broadcast) . . , , . .
, , , , .
.
STATE_TYPE, , (state variables), , , 8.2.
, .
, (condition variable predicates), (), . , : " ", " ", " ". , ( ""). . ( ) , .
, ( cvp, ). , , , , . , , , . , .
Windows 9x Windows NT. SignalObjectAndWait.
|
|
PulseEvent, , - Microsoft (. MSDN), . , () , SetEvent.
typedef struct _state_t {
HANDLE Guard; /* , . */
HANDLE CvpSet; /* , cvp(). */
/* , , . */
struct STATE_VAR_TYPE StateVar;
} STATE_TYPE State;
/* , . */
/* , . */
WaitForSingleObject(State.Guard, INFINITE);
/* , , */
/* CV. */
/* : .*/
State.StateVar.MsgCount += N;
PulseEvent(State.CvpSet);
ReleaseMutex(State.Guard);
/* . */
/* . */
WaitForSingleObject(State.Guard, INFINITE);
while (!cvp(&State)) {
ReleaseMutex(State.Guard);
WaitForSingleObject(State.CvpSet, TimeOut);
WaitForSingleObject(State.Guard, INFINITE);
}
/* , , */
/* cvp(&State). */
/* , , .*/
ReleaseMutex(State.Guard);
/* . */