Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,121
Записей в блоге: 12
1

SetEvent + WaitForSingleObject

22.09.2016, 19:54. Показов 2120. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть ли гарантия, что WaitForSingleObject успеет сработать, если другой поток сделает SetEvent и CloseHandle подряд?

Добавлено через 37 минут
И ещё вопрос: каких значений не бывает у хэндла (кроме 0)?
Ну, например, 1 или -1.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2016, 19:54
Ответы с готовыми решениями:

Не работает WaitForSingleObject
Надобно, чтобы главный поток застопорился и подождал, пока один из дочерних не скажет, что можно...

ShellExecuteEx, WaitForSingleObject, Ожидание завершения работы другого приложения
добрый вечер. итак, задача (которую я решил благодаря CyberForum.ru :)), следующая: необходимо...

SetEvent вызывает каждый поток только раз
Добрый день.Никак не могу разобраться с синхронизацией потоков. Делаю некую имитацию Round Robin....

WaitForSingleObject
Приветствую. Вот собственно код который нужно поправить. void changeFile() { DWORD...

7
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.09.2016, 20:21 2
Цитата Сообщение от 7in Посмотреть сообщение
Есть ли гарантия, что WaitForSingleObject успеет сработать, если другой поток сделает SetEvent и CloseHandle подряд?
Нет такой гарантии. Поведение WaitForXxx в этом случае не определено.

Цитата Сообщение от 7in Посмотреть сообщение
И ещё вопрос: каких значений не бывает у хэндла (кроме 0)?
Точно знаю, что не бывает NULL, INVALID_HANDLE_VALUE и (ULONG_PTR)-2.
0
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,121
Записей в блоге: 12
22.09.2016, 21:46  [ТС] 3
А INVALID_HANDLE_VALUE не бывает для любых хэндлов или только для файловых?
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.09.2016, 22:03 4
Для 99% типов хэндлов INVALID_HANDLE_VALUE является недопустимым значением.


Единственное, пожалуй, исключение из этого правила - Non-IFS Handle в Layered Service Provider,
но я не уверен, что там функции будут работать с таким значением.
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
23.09.2016, 04:46 5
Цитата Сообщение от Убежденный Посмотреть сообщение
Точно знаю, что не бывает NULL, INVALID_HANDLE_VALUE и (ULONG_PTR)-2.
Есть ещё псевдохэндлы, получаемые посредством вызова GetCurrentProcess/GetCurrentThread. Значение псевдохэндла процесса -1 (INVALID_HANDLE_VALUE), а потока -2.
0
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,121
Записей в блоге: 12
23.09.2016, 14:01  [ТС] 6
Ага. Ещё раз: т.е. для мьютексов, семафоров и ивентов -1 и -2 точно быть не может, правильно?
0
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,121
Записей в блоге: 12
24.09.2016, 21:50  [ТС] 7
Убежденный, jupman ???
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
24.09.2016, 22:34 8
Лучший ответ Сообщение было отмечено Jin X как решение

Решение

Дело в том, что числовые значения хэндлов являются недокументированным
поведением системы и закладываться на это поведение опасно.
NULL, (PVOID)-1 и (PVOID)-2 точно не могут использоваться ни для каких
хэндлов (ну за исключением, быть может, Non-IFS socket handle, но я не уверен).

Вообще, если понаблюдать за тем, какие числовые значения присваиваются хэндлам,
то можно найти некоторые простые закономерности: значения кратны четырем,
идут по возрастающей (например, 0xC4, 0xC8, 0xCC, 0xD0 и т.д).
Младший бит у хэндлов точно не используется. Например, в I/O Completion Port
младший бит event-а может использоваться для хранения специальной информации.
Еще можно глянуть в исходниках Win2K/WRK функцию ExCreateHandle.
После этого приходит ясность по поводу того, что INVALID_HANDLE_VALUE ну
никак не может оказаться валидным значением для хэндла, даже случайно
То же самое с NULL и (PVOID)-2.
1
24.09.2016, 22:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2016, 22:34
Помогаю со студенческими работами здесь

Мютекс и WaitForSingleObject
Тренируюсь для личного интереса перевожу с С++ на С#. За мой бредняк не ругайте. Вот код на с++...

WaitForSingleObject и многопоточность
Добрый день! Мучаюсь с такой задачкой. Имеется C++ DLL, которую до меня писал другой программист....

WaitForSingleObject(). C++ WinAPI
Привет. У меня вопрос : почему во время работы WaitForSingleObject() я могу вывоить часы реального...

WaitForSingleObject - проблема!
здравствуйте, у меня есть шаблонный список елементов структуры struct proc { int exename;...

Потоки. WaitForSingleObject.
Здравствуйте! Помогите пожалуйста решить проблему. Читать лучше сразу самый низ кода - большой...

WaitForSingleObject - вопрос.
Привет. WinApi функция WaitForSingleObject. Как она работает? Ждет завершения патока (тот, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru