Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.01 c
4-28347
TankMan
2002-10-28 09:58
2002.12.09
Как описывать реакцию на события динамически создаваемых объектов


1-28071
Manulo
2002-11-24 16:23
2002.12.09
хм... текстовый файл


3-27888
Шурик Ш
2002-11-20 11:55
2002.12.09
Помогите составить запрос


14-28277
Ketmar
2002-11-15 18:20
2002.12.09
все. до-ве-ли! увольняюсь.


6-28179
Sergey2
2002-10-08 14:55
2002.12.09
Нужна помощь.





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