Soweit ich mich erinnere, muss der Thread schon selber Bescheid geben, wenn er unterbrochen werden könnte, meist durch
API-Aufrufe.
Definitiv nicht. Sleep gibt den Prozessor freiwillig ab, blockierende Systemaufrufe auch. Ansonsten sind Threads präemptiv, dh. dem Thread wird die CPU entrissen wann immer das Betriebsystem Lust dazu hat.
Dann kann der Thread den Prozess lahmlegen. [...] Soweit ich weiß, unterbricht Windows die Threads nicht selbst, sondern nur die Prozesse...
Man unterscheidet User-Level-Threads und System-Level-Threads. Von User-Level-Threads hat das System keine Ahnung und sie laufen nicht parallel. Unter Windows könnten das
Fibers (sind eher Coroutinen) sein, man könnte es auch selbst implementieren. System-Level-Threads sind dem System bekannt und können echt parallel laufen. Die normalen Threads, die man in der Regel benutzt, sind System-Level-Threads.
Ich
vermute, dass der
GUI-Thread derselbe ist wie der der Schleife - und da der mit der Schleife zu tun hat, kommt er nicht mehr zum Bearbeiten der
GUI.
Ich auch ... schon weil das in einem Ereignishandler läuft, der vermutlich vom Mainthread aufgerufen wird. Dann sollte
ProzessMessages aber ausreichen, da es der
GUI nicht helfen sollte, wenn der Thread die Kontrolle abgibt.
Deswegen: Irgendwas läuft da verkehrt