2012-06-08 3 views
0

Есть ли способ узнать все семафоры в настоящее время с сигналами в окнах?Обнаружение всех семафоров в настоящий момент

Один подход заключается в вызове WaitForMultipleObjects (bWaitAll = FALSE, dwMilliseconds = 0)
неоднократно, каждый раз снимая один (сигнал) HANDLE, пока мы не получим WAIT_TIMEOUT,
, но это громоздко и медленно.

Есть ли лучший способ?

+0

Это очень фундаментально, что делать это * никогда * правильно. Все, что вы знаете, что это * было сообщено, вы ничего не знаете о текущем состоянии. Winapi не дает вам простой способ сделать не то. –

+0

Мне не нужно точное * текущее состояние, но вам нужно быстро обработать пакет (выпущенных) ресурсов, как только сможете. Ваша логика может быть слегка растянута, чтобы утверждать, что WaitForMultipleObjects (bWaitAll = TRUE) на семафорах также не является правильным. –

ответ

0

WaitForSingleObject()? Я не думаю, что какая-либо из стандартных функций даст битмаску/массив сигнальных объектов.

+0

WaitForSingleObject() еще хуже: нам всегда нужно называть его n раз –

+0

Но как это соотносится с повторяющимся 'WaitForMultipleObjects()' перетаскиванием массива каждый раз? Я понимаю, что это будет один вызов для каждого, а не для каждого из них, но накладные расходы на перестановки могут компенсировать это в зависимости от того, сколько из них сигнализировано. – Deanna

+0

Не требуется перестановки: простые ручки [r] = handle [- n] будут делать, что на порядок быстрее, чем системный вызов. –

Смежные вопросы