CreateWindow, WinProc, Messageloop
-
Guten morgen in aller Frische,
ich lese gerade ein Buch "Windwos Programming WinAPI". Da wird anhand eines simplen HelloWin ein Programmablauf beschrieben. Nun CreateWindows erzeugt das fenster, man verbindet damit die zugerpdnete Windows Procedure etc. hab ich verstanden. danach lässt man das Programm in die MessageLoop fallen, solange das fenst WM_QUIT an die eigen Messageloop sendet.. auch verstanden. So nun meine Frage:
Das Programm springt ja nach dem aufruf con CreateWindows und zeichnen des Fengster in die Messageloop. Dies ist ja eine Endlosschleife. Was passiert den da genau... es gib ja tausend pogramm die "pseudo parallel" laufen, und jedes Programm bzw. fenster hat ne Messsageloop "je nach dem". Komm nun der Kernel ins spiel, welcher nachrichten zwischen den Messageloops der fenster autauscht? für jedes fenster muss ja ein thread erstellt werden, damit das programm durch die while(GetMessage....){... PeeK,Dispacht Message " schleife nicht hängt? wird da so ein thread autoamtisch erzeugt?
-
Wenn Dein Programm startet, dann hat der erzeugte Prozess exakt einen Thread, dass ist meistens auch der Thread in dem Dein main/WinMain aufgerufen wird. Dein Prozess terminiert spätestens dann, wenn der letzte Thread beendet wird/returniert.
In der MesssageLoop gibt der Prozess auch seine restliche Threadlaufzeit ab, wenn eben keine weiteren Nachrichten anliegen.
Das Timing zwischen Prozesen und Threads macht das Kernel mit dem etsprechenden Thread Scheduler.
-
Die ganze Geschichte ist ja relativ einfach mit der Ereignisgesteuerten Prozessen. Wie sieht es denn in Linux oder anderen Betriebsystemen aus? Wird da ungefähr das das gleiche Prinzip wie in Windows verwendet? Der Erschaffer des Erreignisgesteuerten System Prozesse ,Kernel,etc. Prinzipts war ja demnach MS oder?
-
Das ist aber keine Spezialität von M$, jeder gute Programmierer mit Ahnung von Systemprogrammierung kann das nachbauen. In Linux etc. funktioniert das natürlich auch.