Поведение WaitForMultipleObjects, когда несколько дескрипторов сигнализируют одновременно

Попробуйте просто

Cells(emptyRow, 15).Value = Cells(emptyRow, 15).Value & "," & stCode1Box.Value
5
задан Martin Thompson 3 June 2014 в 14:39
поделиться

3 ответа

Так, теперь если несколько объектов сигнализируют, что я получу индекс первого. Я должен циклично выполниться, хотя мой массив, чтобы видеть, предупредили ли какие-либо другие?

Почему не только возвращаются вокруг в Ожидание ()? если несколько объектов сигнализировали, они будут все еще сообщены, когда Вы возвратитесь вокруг. Конечно, если у Вас будет очень быстро стреляющий первый объект в объектном массиве ожидания, то он исчерпает ресурсы другие; то, что Вы делаете, заказать Ваши объекты в объектном массиве ожидания частотой увольнения с наименее частым существом сначала.

BTW, где Вы используете бесконечное для (), Вы могли использовать goto. Если Вы действительно не оставляете цикл, безусловный goto наиболее правильно выражает Ваше намерение.

5
ответ дан 18 December 2019 в 14:51
поделиться

Да. Одна альтернатива была бы то, что Вы могли сделать WaitForSingleObject (дескриптор, 0) на каждом дескрипторе, который сразу возвратится и укажет, сообщены ли они или нет.

Править: Вот демонстрационный псевдокод для того, что я имею в виду:

ret = WaitForMultipleObjects()
if (ret >= WAIT_OBJECT_0 && ret < WAIT_OBJECT_0 + (count))
{
    firstSignaled = ret - WAIT_OBJECT_0;

    // handles[firstSignaled] guaranteed signalled!!

    for (i = firstSignaled + 1; i < count; i++)
    {
        if (WaitForSingleObject(handles[i], 0) == WAIT_OBJECT_0)
        {
           // handles[i] Signaled!
        }
    }
}
5
ответ дан 18 December 2019 в 14:51
поделиться

Еще одна опция, которую Вы могли бы иметь, состоит в том, чтобы использовать RegisterWaitForSingleObject. Идея состоит в том, что Вы отмечаете сообщенное состояние события во вторичном массиве от функции обратного вызова и затем предупреждаете об основном событии, которое используется для пробуждения основного потока (который называет WaitForSingleObject на основном событии).

Очевидно, необходимо было бы заботиться, чтобы гарантировать, что вторичный массив был защищен от доступа основным потоком, но он будет работать.

3
ответ дан 18 December 2019 в 14:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: