Es gibt ein paar einfache Regeln, die zu beachten sind:
Windows:
Ein Thread der GUI Elemente (Gadget, Window, Toolbar, etc) erstellt muss seinen eigenen Eventloop haben.
Linux (wenn v4 dann mal da ist

):
Nur der Hauptthread darf einen Eventloop haben, er sollte auch alle GUI Elemente erstellen.
Mac: Weis ich grad nicht.
Allgemein:
Gadgets auf dem Fenster eines anderen Threads erstellen geht nicht. (gibt ein Durcheinander mit den Events)
Gadgets eines anderen Threads manipulieren geht, eventuell muss der Befehl aber so lange warten bis
der Thread dem das Fenster gehört ein WindowEvent()/WaitWindowEvent() ausgeführt hat. (Ist ein Messaging problem)
Also sollten der Thread der das Fenster/Gadget erzeugt hat einen laufenden Eventloop haben,
dann ist Manipulation der Gadgets von anderen Threads kein Problem.
(Ein Problem wäre sowas: Ich erstelle ein Gadget im Hauptthread und starte einen Thread,
der SetGadgetText oder sowas damit macht. Der Hauptthread wartet aber (z.b. mit WaitThread()
bis der Thread ended, befor er wieder ein WaitWindowEvent() ausführt.
Das gibt ein Deadlock, weil das SetGadgetText den WaitWindowEvent() Aufruf im anderen Thread
braucht, aber das erst ausgeführt wird, wenn das SetGadgetText fertig ist.)
Die Threadsafe Option des Compilers ist auf jeden Fall wichtig dass es keine Probleme gibt.
Also kurz:
Damits auf allen Systemen läuft, ist folgendes System gut:
- Main thread erstellt alle Fenster/Gadgets
- Main thread hat den Eventloop, der kontinuierlich Events verarbeitet.
- Andere threads manipulieren nur Gadgets (SetGadgetText, AddGadgetItem, etc...)
Wenn es nur für Windows ist, geht auch das:
- Thread A erstellt Fenster A + Gadgets und hat einen Eventloop für diese Events
- Thread B erstellt Fenster B + Gadgets und hat Eventloop für diese Events
- Manipulieren der Gadgets geht überall, solange der Eventloop des erstellenden Threads läuft.
Das Verhalten von Gadget/Windows und Events ist leider stark vom Event-System des Betriebssystems (bzw von Gtk auf Linux) abhängig, desshalb lassen sich diese Einschrängungen leider nicht umgehen.
Wenn das alles für Linux implementiert ist und feststeht kommt das hier auch in die Hilfe.