[comms] linux vs windows: comms tussen prog en windowmanager

Pagina: 1
Acties:

  • B-Man
  • Registratie: Februari 2000
  • Niet online
Wat ik me afvraag (conceptueel) is hoe de communicatie tussen een windows programma en de windows windowmanager/het OS verloopt. Onder linux is het een client-server verhaal als er gewerkt wordt met Xfree, het is onder windows geen client-server, maar hoe ziet het er dan wel uit? M.a.w.: hoe "praat" een windows programma met het OS/de windowmanager?

Ik heb een tijdje terug wat gerommeld met xfree, en vroeg me toen af hoe dit onder windows geregeld is. Ik wil nl. af van het client-server verhaal onder linux (althans, het moet een keuze zijn).

Aangezien ik niet weet wat ik me hierbij moet voorstellen (shared mem connection?), heb ik nog niets nuttigs met google gevonden.

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08-2025
Volgens mij gebeurt alle communicatie naar het OS door middel van zogenaamde messages.

Er worden bijvoorbeeld messages gestuurd wanneer je een venster maximized, wanneer je een programma start enzo ....

Met behulp van het programmatje WinSight (die bij C++ Builder zit), kun je dat heel mooi zien

[ Voor 20% gewijzigd door Feyd-Rautha op 24-06-2003 21:24 ]

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


  • B-Man
  • Registratie: Februari 2000
  • Niet online
Dat snap ik, maar hoe worden die messages uitgewisseld? DDE las ik ergens, maar klopt dit?

  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Window messages werken redelijk simpel. DDE is een verhaal apart, normaal gesproken heb je 'gewone' messages.
Waar het simpel gezegd op neerkomt is dat je voor elk window dat je hebt een callback functie hebt in je programma (de window procedure, WndProc in het kort), dat aangeroepen wordt door het systeem wanneer er een message is voor dat window. Het systeem houdt een queue bij van messages die zodra het kan doorgegeven worden aan de wndproc.
De window thread van je programma (dwz de thread waarin je het window aanmaakt) maakt eerst het window aan, en gaat dan in een oneindige loop (de message pump) met GetMessage (die functie blockt trouwens om de boel efficient te houden). Zodra er een message komt returnt GetMessage, er wordt eventueel wat mee gedaan en uiteindelijk wordt ie doorgegeven aan DispatchMessage. DispatchMessage zorgt dat de WndProc het bericht ontvangt. Daarna gaat de loop met GetMessage weer opnieuw net zolang tot je het window sluit.
Dat geheel zorgt in ieder geval voor de communicatie tussen het programma en het systeem, het systeem zelf zorgt dan dat de venstertjes mooi getekend worden enzo. Er is volgens mij niet echt een duidelijke scheiding tussen het programma en de 'window manager' zoals dat bij linux met sockets vaak het geval is. Uiteindelijk is het gewoon 1 thread de gemixt code van het systeem en van je eigen programma aanroept (en elkaar ook door middel van callbacks en APIs).

www.madwizard.org


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

MSDN Library Online en vooral het hoofdstuk over Message Queues.

[ Voor 57% gewijzigd door curry684 op 25-06-2003 00:23 ]

Professionele website nodig?


  • B-Man
  • Registratie: Februari 2000
  • Niet online
madwizard: dank voor je uitgebreide reactie & uitleg, en curry: bedankt voor je link. Hier kan ik mee vooruit!
Pagina: 1