![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отловить сообщение во втором потоке созданным CreateThread
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) ?