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

Вниз

Потоки   Найти похожие ветки 

 
Volodya_   (2004-03-25 13:40) [0]

Мне нужно выполнить 1 процедуру в отдельном потоке, я делаю так:
hThread := CreateThread(nil,0,@sendthread,nil,0,ThreadID);
Потом в функции sendthread мне нужно вызвать форму, как это правильно сделать?


 
Digitman ©   (2004-03-25 14:21) [1]


> в функции sendthread мне нужно вызвать форму


зачем ? что мешает вызвать ту же форму в основном потоке ?


 
Volodya_   (2004-03-25 15:24) [2]

в основном потоке этого делать немогу


 
Cobalt ©   (2004-03-25 16:10) [3]

И что будет делать ваша форма?


 
Volodya_   (2004-03-25 16:22) [4]

ну будет например выводится лог ошибок ...


 
BiN ©   (2004-03-25 16:33) [5]

Если ты используешь vcl, то не экономь на Classes (используй TThread и иже с ним)


 
Volodya_   (2004-03-25 18:26) [6]

получается я в своём потоке не могу вызвать другую форму?


 
Cobalt ©   (2004-03-25 18:33) [7]

Библиотека VCL не является потокобезопасной.


 
Volodya_   (2004-03-25 18:39) [8]

Тогда как узнать что мой поток отработал?


 
Cobalt ©   (2004-03-25 19:32) [9]

У вас, видимо, кризис в архитектуре программы.
Лучше расскажите задачу полностью.


 
Volodya_   (2004-03-25 19:55) [10]

Есть форма для отправки почты. Я хочу в отдельном потоке запускать процедуру по отправке или получении почты, для того чтобы в то время когда отправляется почта я мог просматривать редактировать и т.д. После того ка почта отправлена, хочу выводить результа отправки, например сколько отправлено, куда, ошибки и т.д. Для этого создаю форму на которую бросаю компонент memo и туда записываю результат, вот так


 
Cobalt ©   (2004-03-25 21:29) [11]

По окончании потока (т.е. перед выходом из Execute) посылаете сообщение основному окну - мол, готово, принимайте результаты (с указанием из какого места брать данные - если потоков несколько - вы уж там сами разрулите.)
Данные можно хранить в полях экземпляра класса-потока. Сам экземпляр, конечно, должен храниться где-нибудь в глобальной переменной (или в поле той самой основной формы).
Можео, в принципе, хранить даже не один экземпляр, а массив или список, в зависимости от того, возможно ли одновременная работа нескольких таких потоков (не будет ли блокировки или нарушения режима работы)


 
GanibalLector ©   (2004-03-26 01:48) [12]

>Потом в функции sendthread мне нужно вызвать форму, как это правильно сделать?
Из потока никак!!!НЕЛЬЗЯ обращаться из потока к оконным контролам.Лично я бы посоветовал в потоке передать сообщение,а в обработчике сообщения уже и творить что-нибудь!

>Тогда как узнать что мой поток отработал?
WaitForMultipleObjects с параметром Infinite


 
Digitman ©   (2004-03-26 08:21) [13]


> в то время когда отправляется почта я мог просматривать
> редактировать


> в основном потоке этого делать немогу


ты противоречишь сам себе

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



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

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.034 c
1-1083080832
volser
2004-04-27 19:47
2004.05.16
Написание класса


3-1082485263
Igoro4ek
2004-04-20 22:21
2004.05.16
Ошибка при создании таблицы


14-1082632846
vopros
2004-04-22 15:20
2004.05.16
Не могу завести компьютер с XP в домен.


1-1083221961
Tex
2004-04-29 10:59
2004.05.16
Преобразование quoted string в control string


8-1078161795
Builder
2004-03-01 20:23
2004.05.16
TAnimate