Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
ВнизПотоки - возможно ли? Найти похожие ветки
← →
neodiX (2002-11-27 14:37) [0]Всем привет.
Есть обьект класса TThread, в классе есть методы и переменные. Я запускаю, скажем 5 экземпляров/потоков этого класса. Теперь мне надо вызвать определеныый метод в определенном потоке, это возможно? А может есть что то типа такого TThread(findThread(thradID)).runmethod;
Если точнее, то меня интерисует можно ли зная ID потока обратится к его методам?
← →
Ihor Osov'yak (2002-11-27 14:44) [1]TThread - класс - оболочка над потоком. В контексте потока выполняется только execute и то, что с него вызвано (прямо, не через синхронайз).
TThread(findThread(thradID)).runmethod вызовет runmethod в контексте того потока, где сделан вызов TThread(findThread(thradID)).runmethod, а не в контексте того потока, который соответствует thradID.
Зы (имхо) TThread + Синхронайз = маленькое западло от Борланда ... По поводу возможных замечаний на сию тему - как возражение - можно вкусно, при соответствующем приготовлении, и мухоморов отведать, и здоровым остатся. (несколько утрировано и преувеличено)
← →
Виктор Щербаков (2002-11-27 14:45) [2]
> Теперь мне надо вызвать определеныый метод в определенном
> потоке, это возможно?
Возможно, только непонятно в контексте какого потока ты хочешь вызывать методы потомка TThread.
← →
neodiX (2002-11-27 14:58) [3]Понимаете есть такая тема: запускается 5 потоков, в которых происходит соединение с удоленными серверами (для каждого соединения разный сервер). Соеденение произошло. Теперь я хочу воспользоватся одним потоком, ну т.е. клиентом и отаслать серверу мессагу. Жму кнопку и ... есть список ID всех потоков которые я создал, как по ID обратится к определеному клиенту/потоку, т.е. получается что я выполняю это действие в контекст основного потока своей проги.
← →
Кулюкин Олег (2002-11-27 15:00) [4]Посылайте сообщение потоку, а в потоке напишите обработцик, который будет звать нужный метод.
← →
neodiX (2002-11-27 15:04) [5]2 Кулюкин Олег
Блин, это может быть то что надо.
← →
Ihor Osov'yak (2002-11-27 15:12) [6]2 neodiX © (27.11.02 15:04)
Олег наверно имел ввиду цыкл выборки сообщений, а под сообщением - виндозное сообщение, посланное через PostMessage..
Зы, не забудьте также создать окошко с оконной процедурой.
Зы 2 - если будут проблемы - пишите osi_тут_собака_osi.te.ua - у меня есть аналогичное решение (поток+окошко+цыкл, причем без юзания vcl) - может и поделюсь... Сюда постить - много места займет...
← →
Digitman (2002-11-27 15:21) [7]
> Ihor Osov"yak
На кой черт код.потоку окно какое-то создавать ради этого ? Код.поток и сам может принимать/обрабатывать сообщения, посланные ему в PostThreadMessage()
← →
Ihor Osov'yak (2002-11-27 15:59) [8]Digitman © (27.11.02 15:21) В принцыпе вы в общем то правы,
но если создано окошко, то при снятии задачи окошко получит WM_Close и иже с ним и у нас будет возможность корректно завершить поток его же средствами ... Для безоконного потока я не уверен, что такая возможность существует. Или я снова не прав? (вообще, на досуге посмотрю - во всяком случае спасибо за критическое замечание).
← →
Кулюкин Олег (2002-11-27 16:05) [9]2 Ihor Osov"yak
Нет, я говорил о PostThreadMessage().
Можно и PostMessage/SendMessage без создания окна - AllocateHWnd
← →
Ihor Osov'yak (2002-11-27 16:10) [10]2 Кулюкин Олег © (27.11.02 16:05)
Ну, значит я не совсем верно понял.
Но AllocateHWnd - тянет за собой VCL (unit forms), а это не всегда приемлимо. Это так, в плане реплики, частный случай..
Зы - было бы более интересно получить комментарий на Ihor Osov"yak © (27.11.02 15:59)
← →
Digitman (2002-11-27 16:12) [11]
> Ihor Osov"yak
"Правильная" задача ("командующая" доп.потоком на уровне сообщений, посылаемых тем же PostThreadMessage) обязана предусматривать корректное терминирование доп.потока посылкой ему спец.сообщения (например, стандартного WM_QUIT, если цикл организован как while GetMessage(..) do..)
← →
Кулюкин Олег (2002-11-27 16:19) [12]2 Ihor Osov"yak © (27.11.02 16:10)
> Но AllocateHWnd - тянет за собой VCL (unit forms), а это не всегда приемлимо. Это так, в плане реплики, частный случай..
Верно подмечено.
> Зы - было бы более интересно получить комментарий на Ihor Osov"yak © (27.11.02 15:59)
Его уже дали :)
См. Digitman © (27.11.02 16:12)
ИМХО, кто породил, тот и должен убивать при своей смерти.
← →
Ihor Osov'yak (2002-11-27 16:32) [13]2 Digitman © (27.11.02 16:12)
Согласен в 99.6 проц случаев :-)
Кстати, для моего случая Ваш вариант был бы менее трудоемок.
Тормознул наверное, или опыта было маловато (это было два года назад). Ну а потом несколько раз повторил решение, не особо задумываясь. Еще раз спасибо за критику.
← →
Digitman (2002-11-27 16:36) [14]
> Ihor Osov"yak
Да это - не критика)... Не напрягайся)
На самом деле наипростейшие базовые решения в подобных ситуациях даютсмя только постоянным анализом всевозможного (близкого по логике) кода и постоянной практикой
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c