Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

id текущего thread?


Страницы:   1 2

Separator ©   (2009-11-18 12:33:00) 

Как узнать id thread'а, который вызвал мою функцию? Требуется для синхронизации с определёнными нитями.
Сразу скажу, что функция не имеет ни какого отношения к классу TThread, поэтому узнать через Self.ThreadId не получиться.


Separator   (2009-11-19 15:10:00) [1]

Спасибо, пошёл качать


Игорь Шевченко   (2009-11-18 17:08:00) [2]

Вот оттуда цитата:
" Если у вас есть единая программа, которая использует несколько потоков, то критическая секция - легкий и удобный способ обеспечения ваших потребностей"

цитата дальше:
"Тем не менее, при написании DLL часто возможно использование DLL несколькими разными процессами одновременно. В этом случае вы должны использовать вместо критических секций мьютексы" - это фигня, причем полная. DLL в разных процессах полностью изолированы друг от друга.


> дайте ссылку на нормальную литературу


Джеффри Рихтер, "Windows для профессионалов"


Separator   (2009-11-18 15:26:00) [3]

Все разобрался, синхронизация с другими потоками не нужна


Separator   (2009-11-18 15:06:00) [4]


> Игорь Шевченко ©   (18.11.09 14:36) [17]

Есть очень интересная статья, я думаю вы с не ознакомились, просто я по ней учился работать с потоко-безопасными списками.
http://forum.vingrad.ru/forum/topic-60076.html
Если там написана всякая фигня, то дайте ссылку на нормальную литературу, а так всё работает и работает просто замечательно.
Хотя конечно я могу и не правильно понять суть.


Leonid Troyanovsky   (2009-11-18 14:39:00) [5]


> Separator ©   (18.11.09 14:13) [15]

> С помощью мьютекса реализую вход в критическую секцию, а
> с помощью семафора ожидание данных в списке.

Во, примерно такое и чудилось.

Выбрось все это, и делай наследника TThreadList,
только, семафоры тут нафик не нужны.

--
Regards, LVT.


Игорь Шевченко   (2009-11-18 14:36:00) [6]


> Мьютексы для того же, для чего в TThreadList критические
> секции.
> С помощью мьютекса реализую вход в критическую секцию, а
> с помощью семафора ожидание данных в списке


Я сильно извиняюсь, но вроде эти объекты предназначены для синхронизации процессов, а не потоков...


Separator   (2009-11-18 14:15:00) [7]

такс, буду проверять


Separator   (2009-11-18 14:13:00) [8]

Мьютексы для того же, для чего в TThreadList критические секции.
С помощью мьютекса реализую вход в критическую секцию, а с помощью семафора ожидание данных в списке.


Leonid Troyanovsky   (2009-11-18 14:13:00) [9]


> Separator ©   (18.11.09 14:07) [12]

> неужели MySuperFunct будет вызвана в контексте 1 потока?

Есть же исходники TThread.
Да и проверить очень просто: MainThreadId vs GetCurrentThreadId.

Мне даже тревожно представить, что там еще не родилось.

--
Regards, LVT.


Leonid Troyanovsky   (2009-11-18 14:08:00) [10]


> Separator ©   (18.11.09 14:00) [10]

> TThreadList не удовлетворяет меня по своим характеристикам.
>  Мой тоже реализует функции lock,  unlock, и еще кучу всяких
> нужностей. Там и мьтексы и семафоры задействованы.

Допустим, что семафоры. А мьютексы-то зачем?

>  В контексте какой нити будет выполняться процедура вызванная
> через Synchronize?

В первичном.

--
Regards, LVT.


Separator   (2009-11-18 14:07:00) [11]

Такс.
Запускаем приложение - это 1 поток.
В контексте 1 потока создаем 2, который чего-то там делает.
Далее, 2 поток чего-то наделал и создал поток №3, ну вот нужно ему оказалось.
В 3 потоке вызывается функция MySuperFunct через Synchronize(MySuperFunct).
неужели MySuperFunct будет вызвана в контексте 1 потока?


Игорь Шевченко   (2009-11-18 14:03:00) [12]


> В контексте какой нити будет выполняться процедура вызванная
> через Synchronize?


в контексте основного потока, об чем написано в комментариях, которые вставляет в код среда при создании нового наследника TThread, ну и в справке


Separator   (2009-11-18 14:00:00) [13]

TThreadList не удовлетворяет меня по своим характеристикам. Мой тоже реализует функции lock,  unlock, и еще кучу всяких нужностей. Там и мьтексы и семафоры задействованы.

Ладно, чуть перефразирую. Что делает функция Synchronize у класса TThread? В контексте какой нити будет выполняться процедура вызванная через Synchronize?


Игорь Шевченко   (2009-11-18 13:52:00) [14]

надо использовать TThreadList и будет тебе счастье.


Leonid Troyanovsky   (2009-11-18 13:40:00) [15]


> Separator ©   (18.11.09 13:23) [6]

> Выполнить в контексте нити создавшей список

А какая, на, разница, в каком?

Конечно, я могу и буквально ответить: QueueUserAPC.
Только, начать надо с консерватории.

--
Regards, LVT.


Leonid Troyanovsky   (2009-11-18 13:34:00) [16]


> Separator ©   (18.11.09 13:12) [4]

> Вот такая вот запутанная задача

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

Так, кто на ком стоял?
И какая, на, подписка?

--
Regards, LVT.


Separator   (2009-11-18 13:23:00) [17]

Выполнить в контексте нити создавшей список


Leonid Troyanovsky   (2009-11-18 13:18:00) [18]


> Separator ©   (18.11.09 12:47) [2]

> Вопрос поставлю по другому, как синхронизировать выполнение
> функции с определённой нитью

Чего подразумевается под "синхронизировать выполнение"?

--
Regards, LVT.


Separator   (2009-11-18 13:12:00) [19]

Попробую описать задачу:
Есть некий список (стек), в который по мере поступления добавляются пакеты данных. У списка есть свойство OnItem, если на него подписаться, то создается новая нить (некий обработчик), которая ждёт появления данных в списке и последовательно вытаскивает пакеты вызывая процедуру OnItem у списка. Так вот, если в обработчике вызывать Synchronize, то с какой нитью он будет синхронизировать? С основной приложения или с той, в контексте которой был создан список? Если 2, то тогда нечего мне заморачиваться, а если 1, то нужно синхронизировать с нить в контексте которой был создан список.
Вот такая вот запутанная задача


Игорь Шевченко   (2009-11-18 13:02:00) [20]


> Вопрос поставлю по другому, как синхронизировать выполнение
> функции с определённой нитью, если мне известен его handle
> или id?


Как выполнить функцию в контексте потока, ID которого тебе известен ?

Странная задача


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо