![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потоки [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 мне нужно вызвать форму
зачем ? что мешает вызвать ту же форму в основном потоке ?