Форум: "Основная";
Текущий архив: 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