Re: Kwestia ctrl-alt-del

Autor: Wojciech Gazda (gazda_at_fema.krakow.pl)
Data: Wed 02 May 2001 - 15:37:49 MET DST


Bartosz Tomasik Bart/2 napisał(a):
>
> On Mon, 30 Apr 2001 17:38:02 +0200 (MET DST), Rafal Szymczak wrote:
>
> >Co prawda PM laduje to do tej samej kolejki, ale mozna ja
> >pominac. WinSendMsg jest "natychmiastowym" wykonaniem polecenia, a
> >WinPostMsg wstawia polecenie do koleki.
>
> z tego co wiem, to obydwa wstawiaja do kolejki, roznica jest taka, ze WinSendMsg
> czeka na potwierdzenie odbioru (i wynik obslugi wiadomosci),a WinPostMsg nie.

Bzdura! :->>

WinSendMsg() zwyczajnie _wywołuje_ procedurę okna do którego wysyłany
jest komunikat, przekazując jako parametry te które podano w
WinSendMsg(). Jest to prawie tak jak normalne dalekie wywołanie funkcji.
Prawie, dlatego że w międzyczasie następuje zmiana kontekstu - procedura
okna docelowego wykonuje się w kontekście procesu docelowego anie
wywołującego (za pomocą WinInSendMsg() można stwierdzić czy wysłanie
nastąpiło z tego samego wątku czy z innego, a częściowo czy z innego
procesu - na przykaład komuniakty WM_PRESPARAMCHANGED odbierane przy
upuszczaniu do okna obiektów z palet kolorów/czcionek są wynikiem
międzyprocesowego wywołania procedury okna przez PM Shell).
Aby WinSendMsg() zakończyło działanie, w procedurze okna do którego jest
wysyłany komunikat, musi nastąpić wyjście przez return().

Z kolei WinPostMsg() wstawia komunikat na koniec kolejki, skąd jest on w
pętli obsługi komunikatów pobierany za pomocą WinGetMsg(), a dopiero
procdedura WinDispathMsg() wywołuje odpowiednią procedurę okna.

Podsumowując - reakcja na WinSendMsg() jest natychmiastowa,
synchroniczna z wywołaniem bo omija kolejkę komunikatów, natomiast na
WinPostMsg() opóźniona z powodu pobytu komunikatu w kolejce.

-- 
Wojciech Gazda
/*******************************************************/
/* Home page        - http://www.fema.krakow.pl/~gazda */
/* Asua programmers - http://www.asua.org.pl           */
/*******************************************************/


To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 15:31:48 MET DST