Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синхронизация мьютекс, мьютекс 
:(
    Опции темы
evgovs1991
Дата 30.10.2015, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 9.10.2014

Репутация: нет
Всего: нет



Разбираюсь с мьютексами и синхронизацией приложений. Создал редактор.В нем есть диалог печати если запущены несколько копий редактора и в одном из них открыт диалог печати, то в остальных копиях диалог печати не открывается и выдается сообщение о том, что принтер занят а для синхронизации использовать мьютек надо. Помогите разобратся что и как?

PM MAIL   Вверх
Alexeis
Дата 30.10.2015, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



evgovs1991, возможно это просто ограничение Windows. Принтер ведь последовательное устройство. На нем нельзя печать 2 документа одновременно. Не думаю что мьютекс тут поможет. Мьютекс нужен когда в программе имеется несколько потоков.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
evgovs1991
Дата 30.10.2015, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 9.10.2014

Репутация: нет
Всего: нет



Цитата(Alexeis @ 30.10.2015,  19:36)
evgovs1991, возможно это просто ограничение Windows. Принтер ведь последовательное устройство. На нем нельзя печать 2 документа одновременно. Не думаю что мьютекс тут поможет. Мьютекс нужен когда в программе имеется несколько потоков.

вопрос в том как запретить открывать окно диалога печати...mainmenu компонент там кнопка вызывающая диалог печати...ну вот когда я запустил две копии а в одной из них открыт этот диалог...то в другой нельзя его открыть...как то так
PM MAIL   Вверх
Crystaly
Дата 2.12.2015, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.12.2015

Репутация: нет
Всего: нет



Alexeis, два редактора это и есть два потока, которые хотят получить доступ к общему ресурсу (принтер)

evgovs1991, надо запросить мьютекс у системы.
про мьютексы windows здесь:
https://msdn.microsoft.com/ru-ru/library/wi...v=vs.85%29.aspx
про использование мьютексов написано с примерами (англ). Обратить внимание на функцию CreateMutex() - создание мьютекса, там есть параметр lpName - имя мьютекса. Наверно, все редакторы (потоки) должны создать мьютекс с одним именем. Только первый поток успешно создаст мьютекс, остальные (запущенные позже) получат ошибку - тогда проверить причину ошибки и выяснить что такой мьютекс уже создан и получить на него ссылку (обработчик). И далее использовать (вызывать перед печатью). А вот освобождать мьютекс должен только последний поток - редактор который закрывается последним. Для этого наверно надо использовать "семафор" (semaphore) - создается также как и мьютекс.
про семафоры windows здесь:
https://msdn.microsoft.com/ru-ru/library/wi...v=vs.85%29.aspx
семафор имеет (я так думаю) счетчик, который увеличивается на 1 когда каждый поток запускается, и уменьшается на 1 когда каждый поток закрывается. Перед закрытием каждый поток проверяет семафор и закрывает (освобождает) мьютекс когда семафор обнуляется. Таким образом, все редакторы (потоки) должны иметь один общий мьютекс для получения доступа к принтеру и один общий семафор для учета сколько редакторов (потоков) запущено. Как-то так.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1250 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.