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

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

Как сделать Ассинхронный вызов из основного потока в потокTThread


Rule ©   (2006-04-27 17:46:00) 

причем так чтобы метод выполнялся в потоке TThread, грубо говоря нада дать команду на выполнение некого метода с некоторым параметров из основного потока в не основной и дождаться пока он выполнится ...
кто чего подскажет, как это грамотней сделать ???


Rule   (2006-04-28 21:24:00) [1]

огромное всем спасибо, я так почиатл и действительно надо быть телепатом чтоб ответить на мой вопрос :-))), дело в том что поток из цикла останавливать нельзя так как он выполняет ещё команды из дургих потоков кроме основного, но ассинхронные ... ситуацию я разрулил,  я посылаю ассинхронный запрос, и жду когда прийдет ответ в виде постмессадже ... вот и все ... чтоб не ломать существующее и не городить сложных конструкций обошелся таким решением, работает изумительно :-)))
да кстати почему именно не выполнять это в основном потоке, да потомучто в доп, потоке идет работа с привередливым ОЛЕ сервером, который реализует доступ к кассововму аппарату, а так как там схема симпл аппартмент и есть коллбек, то возникают дедлоки,  с этих соображений не хочу создавать прокси в друких потоках на этот объект, а просто все разруливаю в одном потоке, а события ловлю в другом потоке, которые работают в разных аппартментах и исключают дедлоки ...
вроде попытался доступней все разъяснить ...


GrayFace   (2006-04-28 11:13:00) [2]

> Внук ©   (27.04.06 18:27) [2]
> Вероятно, нужно использовать какой-либо объект синхронизации,
>  например Event, которого должен ждать главный поток.

Или Suspend/Resume. Только проблема будет, если старый приказ поток еще не вымолнил, а ему новый дают. Короче, либо очередь сообщений, либо отдельный поток для каждой процедуры. Второе предпочтительно. Если же нужно подряд отправит на выполнение N-ое кол-во действий, то весь цикл расположи в доп. потоке.


Сергей М.   (2006-04-28 10:58:00) [3]


> Внук ©   (28.04.06 10:21) [7]


Автор, вероятно, имел ввиду, что осн.поток во время ожидания результата работы доп.потока должен реагировать на события UI.


> Rule


Если мои телепатические способности не так уж плохи, то тебе поможет MsgWaitForMultipleObjects().


Внук   (2006-04-28 10:21:00) [4]

>>Leonid Troyanovsky ©   (28.04.06 03:09) [6]
 Смысла не видно сразу, разве что учебная задача :)


Leonid Troyanovsky   (2006-04-28 03:09:00) [5]


> Rule ©   (27.04.06 17:46)  

> кто чего подскажет, как это грамотней сделать ???


Выполнить оный метод в первичном потоке, и ничего
ожидать не придется.
Т.е., в данной постановке, не видно смысла в
использовании вторичного потока.

--
Regards, LVT.


Rule   (2006-04-27 18:49:00) [6]

Eraser ©   (27.04.06 18:29) [3]
да уже переделывать все некошерно, а велосипед  я не придумывал а сдер у Марко Кэнту, который для меня является большим авторитетом ...


Rule   (2006-04-27 18:48:00) [7]

Внук ©   (27.04.06 18:27) [2]
о вот это идея ... спасибо, чет не подумал както сразу


Eraser   (2006-04-27 18:29:00) [8]


> Rule ©

велосипеды изобретать думаю не стОит, а стОит организовать стандартную очередь сообщений, с пом. ф-ии Get/PeekMessage. И отсылать сообщения с пом. PostThreadMessage или даже создать эфимерное окно, чтобы обрабатывать синхронные сообщения, отосланные с пом. SendMessage.


Внук   (2006-04-27 18:27:00) [9]

Вероятно, нужно использовать какой-либо объект синхронизации, например Event, которого должен ждать главный поток.


Rule   (2006-04-27 17:53:00) [10]

да чуть не забыл, вот этот поток TThread находится в цикле в методе Execute  и там есть TThreadList  в который записываются команды, которые должен обрабатывать запрос, но это же получается ассинхронный вызов, как в существующую структуру впихнуть синхронный вызов ???


Наверх

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