Nem értem az event/polling kezelést...

Fórumok

Nem értem az event/polling kezelést...

Hozzászólások

Azért raktam ezt a témát a flame-be, mert kedvenc viccoldalamon az alábbi topicban megy az észosztás:

Mégsem lesz új parancssor a Longhorn-ban

A felvetett problémával kapcsolatban annyit kérdeznék ami a topicban is látszik, hogy azért mert valamit scripttel érek el a winben (wsh) ami a szabványos WMI-n keresztül kommunikál lehetséges-e, hogy egy program sohasem csináljon semmit.

Konkrétan:

[code:1:3076370b20]
A tévedésed az, hogy az üzenetfeldolgozó ciklusnak egyáltalán nem kell Sleep()-elnie, mert úgy is várhat eseményekre, hogy meg se kapja addig a vezérlést, amíg egy újabb (esemény) nem érkezik részére. Valahogy így:

while (GetMessage(msg))
DispatchMessage(msg);

Ebben semmi poll nincs, ez egy egyszerű előre nem rögzített iteráció-számú feltételes ciklus, amely azonban feleslegesen sosem fut le, hanem csak akkor, ha van is effektív mit csinálnia (a feltételvizsgálaton kívül is). A pollozás pedig az, amikor utóbbi nem valósul meg.
[/code:1:3076370b20]

Hogyan lehetséges, hogy egy program fut miközben mégsem fut???

Valahol valaminek futnia kell szerintem (gumicsirke).

nekem ebbol az jon le, hogy a Getmessage meg a korulotte levo while az fut, nem?

[quote:11916e5c9e="ruczati"]nekem ebbol az jon le, hogy a Getmessage meg a korulotte levo while az fut, nem?

Szerintem is, de a winfanok meg vannak győződve róla, hogy nem fut.
Ezért is kérdezem, hogy most akkor gumicsirke vagy apróbéka? :D

Idézet az MSDN-ből (MSDN:GetMessage):

The GetMessage function retrieves a message from the calling thread's message queue. The function dispatches incoming sent messages until a posted message is available for retrieval.

Unlike GetMessage, the PeekMessage function does not wait for a message to be posted before returning.

Vagyis a GetMessage csak akkor tér vissza, ha van esemény. Addig vár (sleep-el), és a scheduler csak akkor ütemezi újra a taszkot, ha történt valami.
Azaz semmi más nem történt, mint hogy a sleep-et elrejtették egy függvényhívásba.

HTH:
Babszem.