Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.02.2016, 13:55   #1
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
Вопрос Возможно ли узнать состояние мьютекса, не входя в него?

Добрый день. Вопрос по сабжу. Сразу оговорюсь, интересует именно виндовый объект синхронизации, не POSIX (там такая возможность имеется). Если есть такая апи-функция, возвращающая состояние мьютеса в момент вызова (без вхождения в мьютекс), либо иной способ, буду признателен!
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 29.02.2016, 14:02   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Нет, такой возможности нет.
А смысл?
waleri вне форума Ответить с цитированием
Старый 29.02.2016, 14:17   #3
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

смысл есть: например абстрактная ситуация, когда следует узнать, возможно ли обратиться к каким-то данным или начать какой-то процесс. Для этого достаточно узнать состояние мьютекса (речь о нем конкретно в данном топике) - сигнальное или нет. Например, с критической секцией это возможно.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 29.02.2016, 14:22   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

лучше не разделять получение ресурса с проверкой состояния.
потому что вы можете попасть в ситуацию что мютекс свободен в проверке, а к моменту захвата уже нет.
потому пытайтесь захватить, вышло значит можно работать с ресурсом, иначе нет.(захват без ожидания)
Цитата:
например абстрактная ситуация, когда следует узнать, возможно ли обратиться к каким-то данным или начать какой-то процесс.
см выше.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.02.2016, 14:26   #5
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Пепел Феникса, вы пояснили причину, это понятно. Однако будет работать такой пример: gui не может начать выполнять задание, пока поток не отработает. Т.е захватчиков ресурсов одномоментно может быть только 1. Вопрос остался открытым - реально ли получить состояние мьютекса? если да, то как. Спасибо.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 29.02.2016, 14:51   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Однако будет работать такой пример: gui не может начать выполнять задание, пока поток не отработает.
и однако gui должен захватить мютекс когда он начнет его делать.
не путайте мютексы с флагами.

без захвата никак, и это верно. ИМХО.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.02.2016, 15:41   #7
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Чтож, спасибо и на этом. Ответа на интересующий вопрос я не получил. Тему можно закрыть.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 29.02.2016, 17:18   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
смысл есть: например абстрактная ситуация, когда следует узнать, возможно ли обратиться к каким-то данным или начать какой-то процесс. Для этого достаточно узнать состояние мьютекса (речь о нем конкретно в данном топике) - сигнальное или нет. Например, с критической секцией это возможно.
Нет, с критической секцией это тоже не возможно.
Если вы имеете ввиду TryEntryCriticalSection ето несколько иное - это захват критической секции, можете ровно так же сделать и с мьютексом.

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

Ответ на ваш вопрос вы получили ровно в первом же ответе.

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
Пепел Феникса, вы пояснили причину, это понятно. Однако будет работать такой пример: gui не может начать выполнять задание, пока поток не отработает. Т.е захватчиков ресурсов одномоментно может быть только 1. Вопрос остался открытым - реально ли получить состояние мьютекса? если да, то как. Спасибо.
У вас дизайн плохой. Сделайте так, чтоб поток после отработки слал сигнал UI потоку, что готов принять новую задачу.

Последний раз редактировалось Пепел Феникса; 29.02.2016 в 18:14.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
узнать состояние переменной из другого потока Antony41 Общие вопросы Delphi 20 18.06.2015 12:00
Узнать состояние TPopupMenu Alter Компоненты Delphi 2 07.03.2011 13:21
Узнать состояние кнопок мыши Cold_Night Общие вопросы Delphi 3 07.06.2009 21:36
Узнать состояние подключения Hottabych Работа с сетью в Delphi 8 03.03.2008 18:10
можно ли узнать имя HTML-поля, кликнув на него? furstenberg Работа с сетью в Delphi 0 28.01.2008 16:49