Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15294
Рейтинг: 1518
#106: 2007-08-21 15:33:33 ЛС | профиль | цитата
Сообщения, посланные между нитями обработаны только, когда нить получения выполняет поисковый кодекс сообщения

как-то мне не до занятий переводами сейчас... Ясно только одно: либо имеем очередь, либо одновременный доступ к данным.
карма: 26
0
Ответов: 9906
Рейтинг: 351
#107: 2007-08-21 15:57:21 ЛС | профиль | цитата
Да ничего подобного
Если поток назначения выполняет (пусть это даже физически разные процы) какую-то работу, то отправитель спит до тех пор пока тот не сделает "GetMessage" (или то, что Билл имеет ввиду под "message retrieval code")
А ентот "GetMessage" вместо выборки из очереди вызовет "appropriate window procedure". Безо всяких Dispatch, насколько я понимаю

И никакого одновременного доступа к данным, и на очередь наплевать, вроде как.
По крайней мере, все это Биллом написанное - я именно так понял...
карма: 9

0
Ответов: 2125
Рейтинг: 159
#108: 2007-08-21 16:16:18 ЛС | профиль | цитата
Galkov писал(а):
Безо всяких Dispatch, насколько я понимаю

Сомнения тут у меня. Это что-же получается, если я поставлю после GetMessage точку останова в отладчике, то те сообщения, которые SendMessage, у меня не получится поймать? И потом, мало ли что моё приложение будет делать со входящими сообщениями, это уже моё дело.

Так что, пресловутый SendMessage скорее всего всё-таки посылает сообщение в очередь, возможно с более высоким приоритетом, но ждёт (WaitForSingleObject), пока сообщение обработается посредством DispatchMessage.
карма: 1

0
Ответов: 9906
Рейтинг: 351
#109: 2007-08-21 16:23:45 ЛС | профиль | цитата
tsdima писал(а):
Это что-же получается, если я поставлю после GetMessage точку останова в отладчике

Ну попробуй и расскажи - я не пробовал.
Что прочитал, то и "цитирую" (за что купил, в общем)

А вот кстати, ты их что, собираешься поймать и при вызове из того же потока
карма: 9

0
Администрация
Ответов: 15294
Рейтинг: 1518
#110: 2007-08-21 17:43:33 ЛС | профиль | цитата
how to справки microsoft разделяют sendmessage и postmessage только как синхронная посылка сообщений и асинхронная. Ни тот, ни другой работать без обработки очереди по идее не должны.
карма: 26
0
Главный модератор
Ответов: 2997
Рейтинг: 395
#111: 2007-08-23 11:52:51 ЛС | профиль | цитата
Dilma писал(а):
да включен уже с версии 164 как минимум. Достаточно скинуть на среду вот такой *.his файлик:


Проверил:
- установил b165;
- скопировал компилятор из b164;
- запустил предложенный скриптик;
- создал новую схему сервиса;
- нажал компилировать;

Hiasm b165 писал(а):

Build start...
Generated code
Create project...
Command line: dcc32.exe \"C:\\HiAsm\\Elements\\delphi\\code\\Project2.dpr\" \"-U C:\\HiAsm\\.\" -Q
Borland Delphi Version 12.0 Copyright (c) 1983,98 Inprise Corporation

C:\\HiAsm\\Elements\\delphi\\code\\Project2.dpr(47) Error: Undeclared identifier: \'_prop_Wait\'

C:\\HiAsm\\Elements\\delphi\\code\\Project2.dpr(47) Warning: Comparing signed and unsigned types - widened both operands

C:\\HiAsm\\Elements\\delphi\\code\\Project2.dpr(48) Error: Undeclared identifier: \'SStop\'

C:\\HiAsm\\Elements\\delphi\\code\\Project2.dpr(53) Error: Undeclared identifier: \'Stop\'
End build

карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Администрация
Ответов: 15294
Рейтинг: 1518
#112: 2007-08-23 12:46:56 ЛС | профиль | цитата
да, make файлик туда и не попал
карма: 26
0
Ответов: 9906
Рейтинг: 351
#113: 2007-08-24 14:12:13 ЛС | профиль | цитата
tsdima писал(а):
Так что, пресловутый SendMessage скорее всего всё-таки посылает сообщение в очередь, возможно с более высоким приоритетом, но ждёт (WaitForSingleObject), пока сообщение обработается посредством DispatchMessage

Вот чего я тебе скажу...
Собираю схему
Add(Button,2858051,84,112)
{
Left=20
Top=35
link(onClick,10567583:doStart,[])
}
Add(Thread,10567583,140,112)
{
FastStop=0
link(onSyncExec,9671216:doMessage,[])
}
Add(Message,9671216,196,119)
{
}
Ставлю ловушку в KOL
function TControl.ProcessMessage: Boolean;
var Msg: TMsg;
begin
Result := False;
if PeekMessage( Msg, 0, 0, 0, PM_REMOVE ) then
begin
Result := Msg.message <> 0;
if (Msg.message = WM_QUIT) then
AppletTerminated := True
else
begin
if not(Assigned( fExMsgProc ) and fExMsgProc( @Self, Msg )) then
begin
if Msg.message=CM_EXECPROC then beep(1000,1000); //!!!
TranslateMessage( Msg );
DispatchMessage( Msg );
end;
end;
end;
end;
Результат: нету бипов
карма: 9

0
Ответов: 2125
Рейтинг: 159
#114: 2007-08-24 17:16:29 ЛС | профиль | цитата
А что такое CM_EXECPROC и кто его посылает?

[size=-2]------ Добавлено в 17:16
И потом, где гарантия, что оно не через fExMsgProc уходит?
карма: 1

0
Ответов: 9906
Рейтинг: 351
#115: 2007-08-24 18:31:05 ЛС | профиль | цитата
tsdima писал(а):
А что такое CM_EXECPROC и кто его посылает?

Дык цитата несколькими постами выше уже была
Ну и определение там же есть
  CM_EXECPROC       = $8FFF;

tsdima писал(а):
И потом, где гарантия, что оно не через fExMsgProc уходит?

Гарантии дать не сложно: контекстный поиск по fExMsgProc в KOL.pas дает
...
...
fExMsgProc: function( Applet: PControl; var Msg: TMsg ): Boolean;
{* Additional message handler called directly from Applet.ProcessMessage.
Used to call TranslateMDISysAccel API function for MDI application. }
...
...
//[function NewMDIClient]
function NewMDIClient( AParent: PControl; WindowMenu: THandle ): PControl;
...
Applet.fExMsgProc := ProcMDIAccel;
...
...
function TControl.ProcessMessage: Boolean;
...
if not(Assigned( fExMsgProc ) and fExMsgProc( @Self, Msg )) then
...
...
- и все. Не ищи черную кошку в темной комнате
карма: 9

0
Администрация
Ответов: 15294
Рейтинг: 1518
#116: 2007-08-24 21:05:02 ЛС | профиль | цитата
контрольный вопрос: при замене SendMessage на PostMessage бипы появляются?
карма: 26
0
Ответов: 9906
Рейтинг: 351
#117: 2007-08-24 21:36:03 ЛС | профиль | цитата
Конечно.
А куда они на фиг денутся, с подводной лодки-то
карма: 9

0
Ответов: 2125
Рейтинг: 159
#118: 2007-08-26 13:55:18 ЛС | профиль | цитата
Очевидно, если окно принадлежит тому-же Thread, производится прямой вызов WindowProc.
карма: 1

0
Ответов: 9906
Рейтинг: 351
#119: 2007-08-26 14:30:21 ЛС | профиль | цитата
очевидное - не интересно
карма: 9

0
Администрация
Ответов: 15294
Рейтинг: 1518
#120: 2007-08-26 23:08:20 ЛС | профиль | цитата
так интересно как раз с разными thread
карма: 26
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)