Bei GUI-Toolkits hat man das generelle Problem, dass man keinen klassischen linearen Kontrollfluß implementieren kann, sondern ereignisgesteuert arbeiten muss. Und ein GUI-Element wie ein Dialogfenster auch nur anzuzeigen, ohne eine Ereignisverarbeitungsschleife laufen zu lassen, die zum Beispiel auf Anforderungen zum Neuzeichnen verschobener oder aufgedeckter Fensterteile reagiert, wird zwangsläufig irgendwelche unerwünschten Nebeneffekte verursachen.
Das soll heißen, dass du das Problem vermutlich konzeptionell falsch anpackst. Anstatt irgendwo im Programm einfach abzuwarten, musst Du versuchen, Die für Dich relevanten Ereignisse in die GUI-Ereignisschleife einzubetten. Das könnte zum Beispiel so aussehen:
- Man installiert über das GUI-Toolkit einen Timer, der jede Sekunde ein Ereignis auslöst.
- Die Ereignisschleife der GUI ruft nun jede Sekunde ein Callback auf.
- Das Callback liest den aktuellen Messwert der Waage aus und legt ihn in einem Puffer ab.
- Drückt der Benutzer auf den Knopf "wiegen", ruft die Ereignisschleife der GUI ein anderes Callback auf.
- Das Callback zeigt ein Fenster mit dem Inhalt "Bitte warten" an.
- Das Callback liest den Messwertepuffer der Waage aus und prüft, ob daraus ein stabiles Gewicht ermittelt werden kann.
- Falls ja, wird das Gewicht an entsprechender Stelle in ein GUI-Element eingetragen, das Fenster mit dem Inhalt "Bitte warten" wird verborgen und das Callback kehrt zurück zur Ereignisschleife der GUI.
- Konnte kein Gewicht ermittelt werden, lässt das Callback das Fenster mit dem Inhalt "Bitte warten" stehen, startet einen weiteren Timer, der dafür sorgt, dass es selbst nach einer gewissen Verzögerung erneut aufgerufen wird und kehrt ebenfalls zur Ereignisschleife der GUI zurück.
When C++ is your hammer, every problem looks like your thumb.