Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Вниз

создание в delphi mdichild окон в отдельном потоке   Найти похожие ветки 

 
Mim   (2004-03-06 23:51) [0]

Ни кто не реализовывал в
delphi возможность создания в delphi
mdichild окон в отдельном (не основоном
потоке)?

Я как понимаю проблемма здесь в том что
мы не можем обращаться из разных потоков
к одному vcl"ному или clx"ному обьекту
коеми являются application, screen и
mainform с которыми работает mdichild
окошко.

Как бы это обойти?


 
Digitman ©   (2004-03-07 11:37) [1]


> возможность создания в delphi
> mdichild окон в отдельном (не основоном
> потоке)?


зачем ?
только не говори что будет якобы быстрей все работать или "тормозить" что-то там перестанет

доп.поток нужен для выполнения длительных вычислений параллельно с вычислениями в осн.потоке, которые как правило сводятся с вычислениями, связанными с обработкой сообщений/событий польз.интерфейса


 
Mim   (2004-03-07 21:12) [2]

Digitman ©   (07.03.04 11:37) [1]

Дело в том что моя программа построена таким образом что mdichild окна загружаются из динамически подключаемых библиотек которые пишут другие програмисты, и хочется добится максимально стабильной работы программы, даже если в библиотеке есть ошибка.

К стати мелкософт же сделала так что каждое окно роводника запускается в отдельном потоке, мне кажется что это наиболее врное решение.


 
Zacho ©   (2004-03-07 21:33) [3]


> К стати мелкософт же сделала так что каждое окно роводника

Не в потоке, а в процессе. Хотя могу и ошибаться, специально не проверял.


 
Mim   (2004-03-08 08:49) [4]

Zacho ©   (07.03.04 21:33) [3]

Действительно ошибаетесь по умолчанию для каждого окна создается отдельный поток, о чем говорит не несколько а одна explorer.exe в списке задач, хотя в XP есть галочка "запускать проводники в отдельном пероцессе".

Давайте всеже вернемся к основоному вопросу.


 
TUser ©   (2004-03-08 09:04) [5]


> мы не можем обращаться из разных потоков
> к одному vcl"ному или clx"ному обьекту

Надо использовать synchronize, хотя честно говоря, я не очень понял в чем состоит твоя проблема.


 
Cobalt ©   (2004-03-08 10:13) [6]

>TUser ©   (08.03.04 09:04) [5]
>Надо использовать synchronize

Тогда лучше в основном потоке не использовать самому всякие способы синхронизации(мьютексы, там или эвентсы). А то основной поток будет ждать, а ему попробуют сделать synchronize тот, кто захватил мьютекс. И будет мертвая блокировка.


 
Плохиш   (2004-03-08 10:47) [7]

>Mim   (08.03.04 08:49) [4]

Вообще-то Микрософт использует SDI


 
Mim   (2004-03-08 10:58) [8]

TUser ©   (08.03.04 09:04) [5]
Cobalt ©   (08.03.04 10:13) [6]
Во втором абзаце небыло знака вопроса, зачем же вы отвечаете то что я и так знаю :)

Плохиш   (08.03.04 10:47) [7]
Просто mdiparent"ом это формы является desktop. Готов с вами поспорить на эту тему в отдельной ветке (если вы несогласны).

Давайте всеже вернемся к основоному вопросу.


 
Mim   (2004-03-08 11:06) [9]

Вообщем уточняю вопрос
Как сделать чтобы в каждом потоке была своя очередь сообщений
while getmessage(...) do
 begin
   processmessage(...);
   dispatchmessage(...);
 end;

работающая только с этим окном

Как я понимаю такое невозможно, или нет?


 
Erik ©   (2004-03-08 13:37) [10]

Почему невозможно? Все будет работать даже есть спецальная функция которая ждет события или сообщения. MsgWaitForMultipleObject и пр...

Это просто цикл обработки сообщений в потоке.
while PeekMessage(Msg, 0, 0, 0, pm_Remove) do
begin
 if Msg.Message = wm_Quit then
    Halt(Msg.WParam);
 TranslateMessage(Msg);
 DispatchMessage(Msg);
end;


 
Mim   (2004-03-08 20:00) [11]

Erik ©   (08.03.04 13:37) [10]

Почему невозможно? Все будет работать даже есть спецальная функция которая ждет события или сообщения. MsgWaitForMultipleObject и пр...

MsgWaitForMultipleObject работает не с сообщениями. Это один из инструментов межпоточной синхранизации, как я уже говорил, второй абзац, без знака вопроса.

Что касается вашего кода то вы повторили мой небольшим измением :)
Думается что ваш код будет грузить процессор под 100%

чтоже касается завести в каждом потоке цикл обработи сообщений то таких проблемм нет, нужно завести в кадом потоке свой обьект application который будет вращать этот цикл внутри apllication.run. Как я понимаю это не реализуемо поскольку тогда перестанет функционировать mdi основа приложения.

Предлагаю тему на этом закрыть :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
11-1057214468
Vitek
2003-07-03 10:41
2004.03.28
Не качается Updater 3.1 ...


4-1073733697
FireMan_Alexey
2004-01-10 14:21
2004.03.28
Hooks


11-1057130229
Laxer
2003-07-02 11:17
2004.03.28
TreeView


7-1073286301
Shuma
2004-01-05 10:05
2004.03.28
Серийный номер BIOS


9-1058953838
3d[Power]
2003-07-23 13:50
2004.03.28
Вышла новая версия моей игры Need For Kill - Quake3 в 2D.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский