Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > PostThreadMessage


Автор: bems 22.2.2006, 18:09
Как отправить сообщение потоку с другого рабочего стола?

Автор: _hunter 22.2.2006, 18:22
в MSDN' е пишут:
Цитата

This thread must either belong to the same desktop as the calling thread or to a process with the same locally unique identifier (LUID). Otherwise, the function fails and returns ERROR_INVALID_THREAD_ID.

поэтому никак. используй другие методы общения

Автор: Snowy 22.2.2006, 18:29
IMHO никак.
Разве что по сети...

Автор: bems 22.2.2006, 18:47
Цитата(_hunter @ 22.2.2006, 18:22 Найти цитируемый пост)
используй другие методы общения
Можно и так. Но нужна очередь - и очередь сообщений потока очень подходит. Чем лучше заменить, что бы с очередью и не ждать обработки?

Автор: _hunter 22.2.2006, 18:55
смотря кому эта очередь нужна -- если одному потоку очередб и самому реализовать можно и писать в нее по мьютексу.
... хотя очередь делать в любом случае придется. тут интереснее метод доступа реализовать...

Автор: bems 22.2.2006, 19:04
есть поток который на всех рабочих столах ставит хуки.
Из процедуры хука нужно сообщать что-то этому потоку. "Что-то" это не просто сообщение которое пришло в процедуру, например при каком-то конкретном сообщении может понадобиться переслать пару килобайт. В пределах одного десктопа я создавал FileMapping, делал DuplicateHandle и отправлял этот хэндл PostThreadMessage.
Если
Цитата(_hunter @ 22.2.2006, 18:55 Найти цитируемый пост)
писать в нее по мьютексу
то из процедуры хука это может создать тормоза

Автор: _hunter 22.2.2006, 19:09
стартуем в процедуре хука новый поток ( предварительно скопировав ( если нужно ) данные для отправки ) и пишем в общий ресурс в нем

Автор: bems 22.2.2006, 19:21
Во! Вариант. А если я на каждом десктопе создам по серверному потоку и в пределах десктопа оставлю как было. А из этих потоков (их меньше, обычно штуки 3) по таймеру буду писать в этот наш мифический общий ресурс. Видишь недостатки?

Автор: _hunter 22.2.2006, 19:46
только один -- смысла нет smile
+ появляется лишнее звено в цепочке ( смысла существования у которого ( опять же ) нет )

Автор: bems 22.2.2006, 20:55
Цитата(_hunter @ 22.2.2006, 19:46 Найти цитируемый пост)
смысла нет
есть!
Цитата(_hunter @ 22.2.2006, 19:46 Найти цитируемый пост)
появляется лишнее звено в цепочке ( смысла существования у которого ( опять же ) нет )
Лишнее?
Цитата(_hunter @ 22.2.2006, 19:09 Найти цитируемый пост)
стартуем в процедуре хука новый поток
Вот єто лишнее. Поток для этих целей я и хочу создать заранее, а не в процедуре хука, которая выполняется очень часто

Автор: _hunter 23.2.2006, 11:34
твоя схема:
процедура хука -> какой-то поток -> основной поток
моя схема:
процедура хука -> основной поток
( поток крутится тут же )
при таком подходе ( IMHO ) читаемость/сопровождаемость выше. но писать тебе -- тебе и решать...

Автор: bems 23.2.2006, 17:30
Цитата(_hunter @ 23.2.2006, 11:34 Найти цитируемый пост)
моя схема:
процедура хука -> основной поток

а
Цитата(_hunter @ 22.2.2006, 19:09 Найти цитируемый пост)
стартуем в процедуре хука новый поток ( предварительно скопировав ( если нужно ) данные для отправки ) и пишем в общий ресурс в нем
?
Добавлено @ 17:32
ну да ладно, че это я...

В общем, спасибо тебя за полезную дискуссию...

Автор: _hunter 23.2.2006, 18:39
но стартует-то поток из этого же приложения. поэтому я его и не считаю. но ( опять же ) писать тебе...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)