Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Потоки [D6, Win2k, WinXP]


Volodya_ ©   (2004-03-25 13:40:00) 

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


Digitman   (2004-03-26 08:21:00) [1]


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


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


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

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


GanibalLector   (2004-03-26 01:48:00) [2]

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

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


Cobalt   (2004-03-25 21:29:00) [3]

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


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

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


Cobalt   (2004-03-25 19:32:00) [5]

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


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

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


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

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


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

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


BiN   (2004-03-25 16:33:00) [9]

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


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

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


Cobalt   (2004-03-25 16:10:00) [11]

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


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

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


Digitman   (2004-03-25 14:21:00) [13]


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


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо