![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
xTr1m |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Вообще код из MFC, но принцип, думаю, одинаковый везде.
если запустить два exe файла и в одном вызвать эту функцию, то все ок: первая программа создает мьютекс, если во второй программе выполнить это, то она будет ждать завершения. А если запустить один экземпляр и несколько раз выполнить это, то WaitForSingleObject(m_hShared, INFINITE); не ждет. Это нормально? Может я просто не понимаю чего-то? |
|||
|
||||
hawk3500 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 6.2.2009 Репутация: нет Всего: 2 |
Джеффери Рихтер.
Создание эффективных WIN32-приложений. Глава 9 - Синхронизация потоков с использованием объектов ядра Там всё подробно расписанно. --------------------
воин dzen'a |
|||
|
||||
xTr1m |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Прочел, но так и не понял, что произойдет, если два раза вызвать такое из одного и того же потока
повторюсь, что если этот код вызывается из двух разных потоков, то все ок: второй поток ожидает завершения. но если я вызову этот код из одного потока, потом из второго, то второй уже никогда не получает управление, даже если я делаю unlock в первом потоке. Добавлено через 10 минут и 26 секунд Переделал на
стало работать. но это уже с обертками MFC. а WInAPI как в первом примере не работает. |
||||
|
|||||
xTr1m |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Если два раза из одного и того же потока вызвать этот код, то проблема следующая. Во второй раз при вызове CreateMutex возвращается новый хендл, однако происходит ошибка, в которой говорится, что мьютекс уже существует. То есть получается, что создать не получилось, но какой-то хендл возвращается. Как так? |
|||
|
||||
xTr1m |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Заработало вот так
но меня смущает такая реализация. неужели так и делают? |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
xTr1m |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Разобрался. Штука в том, что я не предполагал, что WaitForSingleObject не только блокирует поток, но еще и захватывает ему мьютекс, когда дожидается
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |