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

Вниз

Как мне создать форму во вторичном потоке ?   Найти похожие ветки 

 
UnDISCOvery   (2002-09-26 16:55) [0]

Драсть !
Создаю вторичный поток, хочу туда запихнуть форму которая занимается вводом\выводом данных, как мне это сделать ?
Нужно именно чтобы она существовала не в основном потоке и не "тормозила" его.
Что нужно указывать для Owner, Parent и т.д. ?


 
reonid   (2002-09-26 17:00) [1]

Прежде всего, для этого тебе в потоке придётся сделать цикл обработки сообщений. И вообще, это не рекомендуется.

Обычно всё же делают форму в основном потоке, а во вторичном идёт медленный процесс, который иногда (довольно редко) с помощью Sinchronize уведомляет форму о том, что ей нужно отобразить произошедшие изменения.


 
andrey_pst   (2002-09-26 17:02) [2]

Замыль мне письмо - пришлю ответ с примером.


 
MBo   (2002-09-26 17:06) [3]

>UnDISCOvery
А почему именно форму?
пусть бесформенный поток и занимается I/O


 
UnDISCOvery   (2002-09-26 17:55) [4]

по порядку ... :)

2 reonid: с потоком уже все сделал. суть формы в потоке - получать сообщения от других форм интерфейса и менять поток данных, она суть - невидимая, в принципе это даже не TForm, а TWinControl :). Главное чтобы был хэндл.

2 andrey_pst: лови мыло ...

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



 
NailS   (2002-09-26 17:58) [5]


> UnDISCOvery ©

А что разве прямо в поток нельзя посылать сообщения?
PostThreadMessage чем не подходит?


 
MBo   (2002-09-26 18:01) [6]

>посылку сообщений напрямую потоку
Кроме совета Nails, можно еще AllocateHWND


 
UnDISCOvery   (2002-09-26 18:15) [7]

ну не подходит, т.к. форм может быть много ... т.е. я не делаю ситуацию одна форма - один поток ... я просто хочу убрать "тяжелые" формы из основного потока, чтобы разгрузить интерфейс. И уж насчет PostThreadMessage я уж наверняка подумал.
Не понимаю, по моему вопрос я поставил довольно конкретный. :-/
спасибо за советы конечно, но хотелось что-то конструктивное услышать ...


 
reonid   (2002-09-26 18:24) [8]


Ну так создай форму. Какие у тебя проблемы?

TTestThread = class(TThread)
FForm: TForm;
procedure Execute; override;
end;


procedure TTestThread.Execute;
var Msg: TMsg;
begin
FForm := TTestForm.Create(nil);
FForm.Show;

try

repeat
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
begin
if Msg.Message <> WM_QUIT then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end
else
Terminate;
end;
until Terminated;

finally
FForm.Free;
end;
end;

- всё работает


 
UnDISCOvery   (2002-09-26 18:37) [9]

спасибо


 
troits   (2002-09-27 12:52) [10]

>reonid
Методы почти всех объектов VCL, уж TForm - то точно, должны выполняться внутри "main VCL thread" см. Help.


 
Юрий Зотов   (2002-09-27 14:16) [11]

> troits © (27.09.02 12:52)

> Методы почти всех объектов VCL, уж TForm - то точно, должны
> выполняться внутри "main VCL thread"

Да, при стандартном подходе. Но он не единственный.


> см. Help.

Help надо тоже смотреть с головой. Он не запрещает использовать нестандартные для Delphi (но стандартные для Windows) решения. Надо всего лишь четко понимать, что, как, почему и зачем. И reonid это блестяще продемонстрировал. Глядя именно в Help - но еще глядя в API и исходники TApplication.


 
troits   (2002-09-27 15:06) [12]

>Юрий Зотов
Извините, но я не понял, почему решение reonid сделает "поточно-безопасным" использование _любой_ формы.
UnDISCOvery © (26.09.02 18:15)
>я просто хочу убрать "тяжелые" формы из основного потока, чтобы
>разгрузить интерфейс.



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

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

Наверх





Память: 0.47 MB
Время: 0.008 c
14-21219
kull
2002-09-11 13:06
2002.10.07
Delphi7 and ModelMaker6...


3-20898
woland
2002-09-16 23:43
2002.10.07
Текст под углом


3-20934
Gaber
2002-09-11 10:35
2002.10.07
DBGrid


7-21290
flegma
2002-07-29 01:56
2002.10.07
Как сделать форму невидимой сразу после запуска приложения?


1-21086
Sergey V. Shadrin
2002-09-25 08:08
2002.10.07
найти файл.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский