Ждать указанное количество объектов?

  • Using WaitForMultipleObjects:
    • Makes it possible, to wait for one or all of specified objects to change to a singled state

Вопрос:

  • Как можно дождаться указанной суммы, такой как 5, например

Использование

dwEvent = WaitForMultipleObjects(
                maxExpectedConnections,
                ghEventsA,
                TRUE,//but wait for a specified number instead
                INFINITE);

person Aaron    schedule 08.03.2009    source источник


Ответы (2)


Используйте флаг waitall, чтобы указать, что вы хотите, чтобы ожидание возвращалось, когда сигнализируется любой объект. Когда ожидание возвращается, удалите сигнальный объект из массива объектов и снова подождите, пока у вас не будет N (например, 5 в вашем случае) сигнальных объектов.

person Community    schedule 08.03.2009
comment
Привет, Нил, флаг ожидания - это предопределенная директива? - person Aaron; 09.03.2009
comment
Я имел ввиду передать FALSE в параметре bWaitAll - person ; 09.03.2009

Вы можете просто ждать несколько раз по одному объекту, пока не соберете столько "готовых" объектов, сколько хотите.

person sth    schedule 08.03.2009
comment
Но ожидание одного объекта блокирует поток. Как вы обнаружите, что другой объект становится сигнальным? - person ; 09.03.2009
comment
Я хотел по-прежнему ждать всех, но только до тех пор, пока один из них не получит сигнал с помощью WaitForMultipleObjects(...,..., FALSE,...). Затем подождите с оставшимися объектами, пока не появится сигнал о следующем, и так далее. - person sth; 09.03.2009
comment
Собственно, то же самое, что вы предложили. - person sth; 09.03.2009