Как из треда который запущен в dll передать message в окно??
От: Voit  
Дата: 27.01.06 15:20
Оценка:
САБЖ
Ну и не помешало бы ещё и принять его окошком.
Заранее благодарен...

28.01.06 03:47: Перенесено модератором из 'C/C++' — Павел Кузнецов
Re: Как из треда который запущен в dll передать message в ок
От: Firsov_S  
Дата: 27.01.06 15:43
Оценка:
DLL проецируется на адресное пространство запустившего процесса, так что поток запущеный внутри DLL ничем не отличается от потока запущеного внутри исполняемого файла.
Re: Как из треда который запущен в dll передать message в ок
От: foteam  
Дата: 28.01.06 05:51
Оценка:
Здравствуйте, Voit, Вы писали:

V>САБЖ

V>Ну и не помешало бы ещё и принять его окошком.
V>Заранее благодарен...

как обычно SendMessage() или PostMessage()
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Как из треда который запущен в dll передать message в
От: Voit  
Дата: 31.01.06 06:42
Оценка:
Здравствуйте, foteam, Вы писали:

F>Здравствуйте, Voit, Вы писали:


V>>САБЖ

V>>Ну и не помешало бы ещё и принять его окошком.
V>>Заранее благодарен...

F>как обычно SendMessage() или PostMessage()

А если мне надо передать строку, которая сформироваласьв том потоке а не системный меседж, то как поступать??(Допустим я в том треде считал из файлика данные).
Re[3]: Как из треда который запущен в dll передать message в
От: ekamaloff Великобритания  
Дата: 31.01.06 07:01
Оценка:
Здравствуйте, Voit, Вы писали:

V>Здравствуйте, foteam, Вы писали:


F>>Здравствуйте, Voit, Вы писали:


V>>>САБЖ

V>>>Ну и не помешало бы ещё и принять его окошком.
V>>>Заранее благодарен...

F>>как обычно SendMessage() или PostMessage()

V>А если мне надо передать строку, которая сформироваласьв том потоке а не системный меседж, то как поступать??(Допустим я в том треде считал из файлика данные).

Ну так адресное пространство то у вас одно. Если используешь SendMessage, то просто передаешь адрес этого буфера (он может быть размещен на стеке, поскольку SendMessage работает синхронно). Если PostMessage — за выделение памяти под буфер отвечает твой поток, за освобождение — обработчик сообщения (т.е. другой поток).
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[4]: Как из треда который запущен в dll передать message в
От: Voit  
Дата: 31.01.06 07:09
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, Voit, Вы писали:


V>>Здравствуйте, foteam, Вы писали:


F>>>Здравствуйте, Voit, Вы писали:


V>>>>САБЖ

V>>>>Ну и не помешало бы ещё и принять его окошком.
V>>>>Заранее благодарен...

F>>>как обычно SendMessage() или PostMessage()

V>>А если мне надо передать строку, которая сформироваласьв том потоке а не системный меседж, то как поступать??(Допустим я в том треде считал из файлика данные).

E>Ну так адресное пространство то у вас одно. Если используешь SendMessage, то просто передаешь адрес этого буфера (он может быть размещен на стеке, поскольку SendMessage работает синхронно). Если PostMessage — за выделение памяти под буфер отвечает твой поток, за освобождение — обработчик сообщения (т.е. другой поток).


А событие отлавливать OnSysCommand? В основном приложении?
Re[5]: Как из треда который запущен в dll передать message в
От: ekamaloff Великобритания  
Дата: 31.01.06 07:25
Оценка:
Здравствуйте, Voit, Вы писали:

V>А событие отлавливать OnSysCommand? В основном приложении?


В каком еще OnSysCommand? Событие надо отлавливать в оконной процедуре того окна, которому ты посылаешь это сообщение. Для этого нужно будет определить свой тип сообщения:

#define WM_MYMESSAGE WM_USER + 1


Далее:
— если пишешь на голом WinAPI — добавляешь обработку для этого сообщения в оконную процедуру
— если используешь MFC или WTL — добавляешь обработчик этого сообщения в карту сообщений того класса, который связан с данным окном (например визардом)

— вызываешь SendMessage/PostMessage указывая созданный твой идентификатор сообщения
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[6]: Как из треда который запущен в dll передать message в
От: Voit  
Дата: 31.01.06 09:59
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, Voit, Вы писали:


V>>А событие отлавливать OnSysCommand? В основном приложении?


E>В каком еще OnSysCommand? Событие надо отлавливать в оконной процедуре того окна, которому ты посылаешь это сообщение. Для этого нужно будет определить свой тип сообщения:


E>
E>#define WM_MYMESSAGE WM_USER + 1
E>


E>Далее:

E>- если пишешь на голом WinAPI — добавляешь обработку для этого сообщения в оконную процедуру
E>- если используешь MFC или WTL — добавляешь обработчик этого сообщения в карту сообщений того класса, который связан с данным окном (например визардом)

E>- вызываешь SendMessage/PostMessage указывая созданный твой идентификатор сообщения


Сделал, но getmessage не получает моего сообщения. Хендл и у sendmessage и у getmessage один. но не пашет почему то приходит всякая лабуда а то что надо не приходит... Раз у меня одно адресное пространство, может мне просто сделать один буфер обмена на этапе подключения библиотеки и по нему проверять сообщения??
Re[7]: Как из треда который запущен в dll передать message в
От: odisseyLM  
Дата: 31.01.06 10:33
Оценка:
Здравствуйте, Voit, Вы писали:

V>Сделал, но getmessage не получает моего сообщения. Хендл и у sendmessage и у getmessage один. но не пашет почему то приходит всякая лабуда а то что надо не приходит... Раз у меня одно адресное пространство, может мне просто сделать один буфер обмена на этапе подключения библиотеки и по нему проверять сообщения??


Я конечно извиняюсь за грубость, но ты бы в начале почитал бы что-ли какую-нибудь базовую литературу, например Петзольда, Рихтера (там узнаешь что GetMessage выбирает асинхронные сообщения (из очереди), а SendMessage посылает синхронные сообщения, миную очередь — пряио в твою WindowProc) — тяжело говорить с человеком, если он вообще ничего не знает
Re[8]: Как из треда который запущен в dll передать message в
От: Voit  
Дата: 31.01.06 13:35
Оценка:
Здравствуйте, odisseyLM, Вы писали:

LM>Здравствуйте, Voit, Вы писали:


V>>Сделал, но getmessage не получает моего сообщения. Хендл и у sendmessage и у getmessage один. но не пашет почему то приходит всякая лабуда а то что надо не приходит... Раз у меня одно адресное пространство, может мне просто сделать один буфер обмена на этапе подключения библиотеки и по нему проверять сообщения??


LM>Я конечно извиняюсь за грубость, но ты бы в начале почитал бы что-ли какую-нибудь базовую литературу, например Петзольда, Рихтера (там узнаешь что GetMessage выбирает асинхронные сообщения (из очереди), а SendMessage посылает синхронные сообщения, миную очередь — пряио в твою WindowProc) — тяжело говорить с человеком, если он вообще ничего не знает


Вроде разобрался, посылаю message функцией PostMessage, но оно доходит со второго или третьего раза. Из-за чего бы это могло быть??
Re[9]: Как из треда который запущен в dll передать message в
От: Voit  
Дата: 31.01.06 13:44
Оценка:
Здравствуйте, Voit, Вы писали:

V>Здравствуйте, odisseyLM, Вы писали:


LM>>Здравствуйте, Voit, Вы писали:


V>>>Сделал, но getmessage не получает моего сообщения. Хендл и у sendmessage и у getmessage один. но не пашет почему то приходит всякая лабуда а то что надо не приходит... Раз у меня одно адресное пространство, может мне просто сделать один буфер обмена на этапе подключения библиотеки и по нему проверять сообщения??


LM>>Я конечно извиняюсь за грубость, но ты бы в начале почитал бы что-ли какую-нибудь базовую литературу, например Петзольда, Рихтера (там узнаешь что GetMessage выбирает асинхронные сообщения (из очереди), а SendMessage посылает синхронные сообщения, миную очередь — пряио в твою WindowProc) — тяжело говорить с человеком, если он вообще ничего не знает


V>Вроде разобрался, посылаю message функцией PostMessage, но оно доходит со второго или третьего раза. Из-за чего бы это могло быть??
Re[9]: Как из треда который запущен в dll передать message в
От: Voit  
Дата: 31.01.06 13:45
Оценка:
Здравствуйте, Voit, Вы писали:

V>Здравствуйте, odisseyLM, Вы писали:


LM>>Здравствуйте, Voit, Вы писали:


V>>>Сделал, но getmessage не получает моего сообщения. Хендл и у sendmessage и у getmessage один. но не пашет почему то приходит всякая лабуда а то что надо не приходит... Раз у меня одно адресное пространство, может мне просто сделать один буфер обмена на этапе подключения библиотеки и по нему проверять сообщения??


LM>>Я конечно извиняюсь за грубость, но ты бы в начале почитал бы что-ли какую-нибудь базовую литературу, например Петзольда, Рихтера (там узнаешь что GetMessage выбирает асинхронные сообщения (из очереди), а SendMessage посылает синхронные сообщения, миную очередь — пряио в твою WindowProc) — тяжело говорить с человеком, если он вообще ничего не знает


V>Вроде разобрался, посылаю message функцией PostMessage, но оно доходит со второго или третьего раза. Из-за чего бы это могло быть??


Спасибо всем вроде сам разобрался... Пашет!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.