Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.09;
Скачать: CL | DM;

Вниз

Потоки - возможно ли?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
14-28279
Cr@sh
2002-11-19 14:21
2002.12.09
Подскажите с чего начать...


3-27859
SKing
2002-11-21 08:18
2002.12.09
FIBPlus на русском?


4-28342
GOD
2002-10-28 02:39
2002.12.09
Помогите!


1-27925
ilg
2002-11-25 11:07
2002.12.09
Перевод с транслита


1-27952
Dracula
2002-11-29 12:42
2002.12.09
PChar to String