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

Вниз

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

 
Rule ©   (2006-04-27 17:46) [0]

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


 
Rule ©   (2006-04-27 17:53) [1]

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


 
Внук ©   (2006-04-27 18:27) [2]

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


 
Eraser ©   (2006-04-27 18:29) [3]


> Rule ©

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


 
Rule ©   (2006-04-27 18:48) [4]

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


 
Rule ©   (2006-04-27 18:49) [5]

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


 
Leonid Troyanovsky ©   (2006-04-28 03:09) [6]


> Rule ©   (27.04.06 17:46)  

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


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

--
Regards, LVT.


 
Внук ©   (2006-04-28 10:21) [7]

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


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


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


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


> Rule


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


 
GrayFace ©   (2006-04-28 11:13) [9]

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

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


 
Rule ©   (2006-04-28 21:24) [10]

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



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

Форум: "Основная";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.066 c
3-1144959988
Krants
2006-04-14 00:26
2006.06.04
Развернуть БД


2-1147708590
AlexanderMS
2006-05-15 19:56
2006.06.04
Юникод


2-1147756978
manevil
2006-05-16 09:22
2006.06.04
Еще один вопрос про OpenDialog


15-1146945037
casandra
2006-05-06 23:50
2006.06.04
Что вы празднуете 9 мая?


2-1148025380
zorik
2006-05-19 11:56
2006.06.04
Возвратить фокус приложению





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