powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / SetEvent() под Windows 7 работает только один раз
6 сообщений из 6, страница 1 из 1
SetEvent() под Windows 7 работает только один раз
    #38293594
Frame Relay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго всем времени суток.

Кто-нибудь сталкивался с неправильным поведением функции API SetEvent() под Windows 7 32-bit?

Есть 2 процесса — главный и подчинённый, который создаётся по CreateProcess().
Есть именованное событие, используемое для синхронизации между процессами (в обоих процессах событие создаётся по CreateEvent() с manual reset = false).
В подчинённом процессе устанавливается событие через SetEvent(). Главный процесс видит это событие и WaitForSingleObject() разблокируется. Но когда SetEvent() вызывается во второй раз (и возвращает true) — главный процесс уже это событие не видит и соответственно не разблокируется. Причём в нём это событие не закрывается и не сбрасывается.
Шаманство с manual reset = true и ResetEvent() не помогло.

???
...
Рейтинг: 0 / 0
SetEvent() под Windows 7 работает только один раз
    #38297067
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frame Relay,
почитайте http://msdn.microsoft.com/en-us/library/windows/desktop/ms686915(v=vs.85).aspx.
Похоже что там тоже пишут о подобной проблеме и, возможно, Вы там найдете что-нибудь полезное...
...
Рейтинг: 0 / 0
SetEvent() под Windows 7 работает только один раз
    #38297601
Frame Relay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7i
По ссылке я уже читал — но там решения проблемы нет. Но хотя бы понятно, что такое проявляется не только у меня.

Подобное "пропадание" событий происходит не всегда — в одном и том же приложении разные события ведут себя по-разному — одни стабильно многократно сигналят, другие стабильно сигналят только один раз. Причём зависимость от условий создания самих объектов событий, их установки и сброса пока установить не удалось.

Попробую ещё пересоздать приложение под 64-битную "восьмёрку" на MSVS2012 (проблема наблюдалась на 32-битной "семёрке" и MSVS2010).
...
Рейтинг: 0 / 0
SetEvent() под Windows 7 работает только один раз
    #38298218
drsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
SetEvent() под Windows 7 работает только один раз
    #38299637
Frame Relay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drsm
Там не про то.
Проблема в пропадании события после первого удачного срабатывания (т.е. один раз всё проходит нормально).
Один процесс сигналит, другой разблокируется при этом. Снова один процесс сигналит (тот же хэндл) — другой бесконечно ждёт, не видя вновь сигналящего события. если задать блокировку с таймайтом — выход из блокировки по таймайту (не по ошибке или абандону). Т.е. во втором процессе хэндл продолжает быть действительным.
При этом другое событие (сигнал и блокировка в этих двух процессах взаимно переставлены) — без проблем.
Единственное отличие первого события от второго — первое в начальном состоянии устанавливается как сигналящее.
Шаманство с автосбросом/ручным сбросом не помогло.

На Windows 8 пока не пробовал.
...
Рейтинг: 0 / 0
SetEvent() под Windows 7 работает только один раз
    #38300135
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frame Relay,

Может таки код уже покажешь?

Я не думаю, что в какой-то из версий Win есть проблемы с таким базовым механизмом ядра, как Event, поскольку если бы это не работало, то оно быстро бы обнаружилось и исправилось.
А отсюда вывод -- ты не умеешь их готовить.

Напиши синтетический отдельно стоящий тест, пришли...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / SetEvent() под Windows 7 работает только один раз
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]