|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
20.01.2011, 12:55 | #1 |
Форумчанин
Регистрация: 13.05.2010
Сообщений: 670
|
Многопоточность showmodal и WaitForSingleObject
имеется много потоков которые в определённом условии используют вызов showmodal из synchronyze, проблема в том что 2 и более потоков могут потребовать вызов showmodal и поставить весь вызов в цикл, решил воспользоваться WaitForSingleObject, но информации о том как её использовать в потоке для вызова showmodal, что бы пока один из потоков не закончит с ней работать остальные ждут так и не нашёл. Сам вызов кода выглядит так
Код:
Код:
|
20.01.2011, 13:21 | #2 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
20.01.2011, 14:32 | #3 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
А чего вы хотите добиться, вызвав WaitForSingleObject? Узнать, а не висит ли уже главный поток внутри ShowModal()? Так это можно сделать с помощью обычного флага. Или вы хотите обождать, пока главный поток выйдет из ShowModal(), и только тогда запустить свой Synchronize()? Так Synchronize() и без вашей помощи обождёт, когда главный поток освободится.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
20.01.2011, 15:07 | #4 |
Форумчанин
Регистрация: 13.05.2010
Сообщений: 670
|
тоесть при Synchronize из двух потоко доступ к showmodal имеет только один?
|
20.01.2011, 15:24 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
еще проще, код внутри синхрониз может выполнять лишь один поток(и даже главный будет ждать)
(повторю, если не нарушены правила VCL, в данном случае они не нарушены) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
20.01.2011, 15:40 | #6 |
Форумчанин
Регистрация: 13.05.2010
Сообщений: 670
|
Даже если весь Execute обёрнут в TCriticalSection
|
20.01.2011, 15:41 | #7 |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
А MessageBox не спасет отца русской демократии ?
Она модальна и для ее вызова синхронизация с осн.потоком не требуется. |
20.01.2011, 16:24 | #8 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Вместо Synchronize отправляйте главному окну спец. сообщение.
По приёму сообщения главное окно покажет ShowModal-ом другое окно. Только мне сомнительна ценность показа модального окна не по команде пользователя. Пахнет говно-софтом.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
20.01.2011, 16:35 | #9 |
Форумчанин
Регистрация: 13.05.2010
Сообщений: 670
|
на подобе такого что ли?
из потока Код:
Код:
|
20.01.2011, 17:47 | #10 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Наверное.
Только кто такой CT - не ясно. Где тут ShowModal - тоже.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Формы ShowModal | SoftKoc | Общие вопросы Delphi | 6 | 18.09.2010 16:37 |
ShowModal, close!!!! | Ital1cs | Помощь студентам | 3 | 02.04.2010 19:50 |
WaitForSingleObject | besserebrenik | Win Api | 3 | 15.02.2010 22:40 |
вызов из dll не ShowModal. | Roof | Общие вопросы Delphi | 7 | 25.07.2008 15:22 |
AlphaBlend + ShowModal | Cardagant | Общие вопросы Delphi | 2 | 11.06.2008 15:42 |