Главная страница
    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-21220
AL2002
2002-09-11 18:17
2002.10.07
Кто-то знает, где качнуть


1-20978
Avsam
2002-09-25 20:18
2002.10.07
Brush закраска


3-20902
alex_bv
2002-09-12 07:40
2002.10.07
Помогите восстановить базу!!!!


3-20907
amateur2002
2002-09-17 10:28
2002.10.07
Database Connect...


14-21241
RV
2002-09-12 13:16
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский