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

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

Отловить сообщение во втором потоке созданным CreateThread


Страницы:   1 2

Black_Tomcat ©   (2007-12-26 07:08:00) 

Здравствуйте.
Подскажите пожалуйста как отправить сообщение во второй поток и как его там поймать. А то, я что запутался окончательно вроде отправка осуществляется при помощи функции PostThreadMessage, а прием PeekMessage. Но вот только PostThreadMessage возвращает False, a GetLastError 1159. Что я не так делаю?


Black_Tomcat   (2007-12-26 10:30:00) [21]

Мне нужно отправить это сообщение в созданный поток.
И из созданного потока обратно окну.
Oкну можно его отправить  например так SendMessage(Form1.Handle,WM_COPYDATA,0,lParam(i)) .

Но вот как отправить это сообщение в созданный мною поток? И как его там обработать, я не могу понять.
Может ли мною созданный поток, выгребать сообщения из очереди сообщений окна?


Сергей М.   (2007-12-26 10:22:00) [22]

Определись, кому ты посылаешь сообщение - потоку или окну..


Сергей М.   (2007-12-26 10:20:00) [23]

Поток (кодовый) = нить = тред = thread.

Если ты отправляешь сообщение основному потоку, то разумеется он является целевым потоком.


Black_Tomcat   (2007-12-26 10:17:00) [24]

Я пишу на VCL окно стандартное.
Целевая нить и основной поток это одно и тоже?


Сергей М.   (2007-12-26 10:11:00) [25]


> Окно у меня есть


Оно откуда взялось ? Его какая нить создала - целевая ?


Black_Tomcat   (2007-12-26 09:53:00) [26]

Это я знаю :-)
Окно у меня есть. И оно умеет обрабатывать это сообщение. Мне нужно его как-то перехватить перед тем как окно его обработает. Это возможно?


Сергей М.   (2007-12-26 09:47:00) [27]

Прежде чем его "ловить" нужно осознать, что ф-ция SendMessage подразумевает адресатом окно (или окна) , а не нить. Целевая нить у тебя создает хоть одно окно ?


Black_Tomcat   (2007-12-26 09:43:00) [28]

Ясно спасибо.
А как его отловить во втором потоке?


Сергей М.   (2007-12-26 09:38:00) [29]

Тогда отлуп ты получаешь вполне резонно - сообщение с кодом WM_COPYDATA есть специальный зарезервированный вид сообщения, которое можно отправлять только синхронно, т.е. с использованием SendMessage, а не Post[Thread]Message


Black_Tomcat   (2007-12-26 09:35:00) [30]

var
Data:tagCOPYDATASTRUCT;

PostThreadMessage(ThreadID,WM_COPYDATA,0,lParam(@Data));


Сергей М.   (2007-12-26 09:27:00) [31]

А какое конкретно сообщение ты посылаешь ?


Black_Tomcat   (2007-12-26 09:19:00) [32]


> Что говорит SysErrorMessage(GetLastError) ?


'Сообщение может быть использовано только с операциями синхронизации'
А что это значит?


Сергей М.   (2007-12-26 08:34:00) [33]

Что говорит SysErrorMessage(GetLastError) ?


Страницы:   1 2

Наверх

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