006
23.06.2004, 13:11 Uhr
~RHBaum
Gast
|
Zitat: |
Welche Schleife benutzt Windows eigentlich wenn ein Dialogfeld im leerlauf ist vielleicht könnte man dort hineinspringen.
|
Windows benutzt keine alternativen!!! Nachrichtenschleifen ... zumindest ned standardmaessig, man kann sich das bauen, tut man meist aber nur in Spezialfaellen. Ist recht kompliziert und weniger untersteutzt. Und wichtig: der extra Thread fuer die Nachrichtenschleife ist nur fuer das Ausliefern der nachrichten zustaendig, die abarbeitung aller Nachrichten-Handles erfolgt immer im Mainthread, falls nicht expliziet anders definiert.
Die "Fenster" die Nachrichten verarbeiten, nutzen immer nur eine. wenn man andere "Fenster / Controls" subclasst, werden die Nachrichtenschleifen kaskadiert ... die alte nachrichtenschleife empfaengt sie, leitet sie aber an die nachrichtenschleife des untergeordneten controls gleich weiter ....
Es gibt aber einen mechanismus, aus der 16 Bit Area noch, der ON_IDLE sendet, wenn die nachrichtenschleife im leerlauf ist.
wie der mechanismuss genau funzt weiss ich auch ned ... nur funktionieren tuts.
Ich nehm mal an die oberste Nachrichtenschleife erzeugt ON_IDLE, wenn keine Nachrichten vorliegen, Arbeitet ihr Hanlde gegebenfals ab ... wenn, wie bei allen nachrichten, der abbruch-Parameter ned gesetzt ist, gehts an die untergeordneten schleifen weiter .... wenn die keine nachrichten haben .... dann arbeitens das handle gegebenfals ab, und gebens abhaengig von Abbruch Parameter weiter ....
Nachteil dieser Sache ist .... Klemmt dein ON_IDLE klemmt deine komplette Nachrichtenschleife -> System haengt... also entweder laengere operationen zerstueckeln(zwischendrinn steuerung wieder abgeben), oder ganz vermeiden .... Genau das ist der Vorteil / die Daseinsberechtigung von multithreading ... du sperrst deine Aktion in nen anderen thread ... und wenn die gemeinsamen objecte ordentlich locken, koennen deine 2 threads schoen nebeneinander arbeiten, ohne gegenseitig ruecksicht zu nehmen (bis auf die gemeinsam benutzen Objecte) ... und du ersparst dir das applicationsgesteuerte hin und herschlalten zwischen den 2 unterschiedlichen Funktionen / Aufgaben ...
Ciao .... |