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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-21103
cypher
2002-09-24 21:53
2002.10.07
Вид формы...


1-21078
vic_vm
2002-09-25 05:44
2002.10.07
Как увеличить значение указателя


14-21277
AL2002
2002-09-13 17:02
2002.10.07
Чё за хрень, не скажете?


4-21311
MaxIII
2002-08-10 12:19
2002.10.07
TService и СУБД.


1-20946
tytus
2002-09-24 15:23
2002.10.07
Кнопка enter и button