Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.052 c
14-1082615469
Ditrix
2004-04-22 10:31
2004.05.16
Стратегическое планирование


1-1083509511
Pensioner
2004-05-02 18:51
2004.05.16
GetCurrentDir, а может что нибудь другое


1-1083086641
asdus
2004-04-27 21:24
2004.05.16
Передача двумерного массива в процедуру/функцию


3-1082556707
Piton64
2004-04-21 18:11
2004.05.16
работа ADOQuery c SQL-сервером


1-1083227601
siriusP
2004-04-29 12:33
2004.05.16
Очень нужна помощь. Создание компоненты.!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский