На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> PulseEvent , При CreateEvent со сбросом вручную
    Перечитал Рихтера, но так и не могу понять как будет работать PulseEvent.

    Суть такая:
    Создаю событие CreateEvent(NULL, TRUE, FALSE, NULL); со сбросом вручную
    Это событие в WaitForMultipleObjects ожидают несколько потоков

    Что будет если вызову PulseEvent?
    Будут ли гарантированно пробуждены все потоки ожидающие это событие?

    В книге в одном месте написано: "Если Вы вызываете PulseEvent для события со сбросом вручную, любые потоки, ждущие этот объект; становятся планируемыми. При вызове этой функции применительно к со бытию с автосбросом пробуждается только одип из ждущих потоков."
    А в другом месте: "Особой пользы от PulseEvent я не вижу В сущности, я никогда не пользовался ею на практике, потому что абсолютно неясно, какой из потоков заметит этот импульс и станет планируемым"
      :) так попробуй на тестовой програмке, писать то 3 строчки
        Попробовать то конечно надо будет, только вот пара тестов где отработали все потоки может не дадут гарантии что так будет всегда в приложении с большим кол-вом потоков под большой нагрузкой.
        Может кто знает как эта функция устроена, что бы быть уверенным что "должно быть именно так"

        Еще вопрос к опытным товарищам:
        Если один из ожидающих потоков в момент посылки PulseEvent будет еще отрабатывать предыдущий вызов и не успеет встать в ожидание, что будет тогда? Он пропустит этот вызов или отработает его по завершении своей задачи?
          Цитата secondd @
          Будут ли гарантированно пробуждены все потоки ожидающие это событие?
          Да.
          Цитата secondd @
          "Особой пользы от PulseEvent я не вижу В сущности, я никогда не пользовался ею на практике, потому что абсолютно неясно, какой из потоков заметит этот импульс и станет планируемым"
          Судя по всему, кривой перевод. Ни один из объектов синхронизации при использовании хоть какой функции не даёт такой ясности. Тут ИМХО имеется в виду как раз вот это:
          Цитата secondd @
          Если один из ожидающих потоков в момент посылки PulseEvent будет еще отрабатывать предыдущий вызов и не успеет встать в ожидание, что будет тогда? Он пропустит этот вызов или отработает его по завершении своей задачи?
          Пропустит. PulseEvent() взводит событие, влияет на ожидающие его нитки и опускает обратно. Если нет ни одного ожидающего, этот пульс вообще никто не увидит. Если же это событие входит в массив, который нитка ожидает, например, WaitForMultipleObjects() с флагом bWaitAll==TRUE, и при этом не все остальные объекты из этого массива взведены, то событие будет пропущено даже при ожидании этого массива.
          Т.е. в той фразе видимо имеется ввиду "...потому что абсолютно неясно, заметит ли какой-нибудь из потоков этот импульс и станет планируемым". Имется ввиду, что используемый PulseEvent() программер на знает в точности, как, кто и когда будет это событие ожидать, а это практически всегда так. В общем, PulseEvent() "не гарантирует доставку".
            Большое спасибо за разъяснение! Ответ получен! :)
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0298 ]   [ 16 queries used ]   [ Generated: 6.04.26, 06:47 GMT ]