Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

создание в 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.058 c
8-1068792308
bar
2003-11-14 09:45
2004.03.28
Как создать AVI ?


14-1078160755
Yorick
2004-03-01 20:05
2004.03.28
Soft для Siemens A60


4-1074070986
alsov
2004-01-14 12:03
2004.03.28
Hook на файл


11-1056811361
mike.dld
2003-06-28 18:42
2004.03.28
Streams


3-1077696474
ruslanyd
2004-02-25 11:07
2004.03.28
dsql и процедуры в IB