Ich will den Rückgabewert verarbeiten können. Wenn ein False kommt, soll der User aufgefordert werden zu reagieren.
Das in verbindung mit multithreading beisst sich bissi ....
Definier mal, die UI soll nicht einfrieren genauer, was du dir drunter vorstellst. Da steh ich aufn schlauch. Weil eiegntlich soll ja der User "nix machen" bis der rueckgabewert eintrifft ?
Willst du nur das das blockieren des Neuzeichnen der Widgets verhindert wird ? da gibts andere, einfachere mittel und wege.
Wenn doch richtiges MT willst, solltest du eh anfangen, asynchron zu denken. D.h. sowas in der Art wie:
- Aktion starten .... User bekommt die kontrolle sofort wieder zurueck.
- Optional kann deine Aktion Ihren Progressfortschritt in bestimmten intervallen an die GUI schicken.
- User kann in der zwischenzeit andere Aktionen starten ...
- Deine Aktion ist fertig geworden (im Hintergrund) und benachrichtigt dich (GUI Thread) drueber.
- Du fragst bei naechster gelegenheit das Resultat ab, und praesentierst dem User das Ergebnis, bzw bietest deine Auswahloptionen ....
- user startet durch die Auswahloption die naechste Aktion ...
So solltest du bei multithreading denken .... ansonsten kommst ganz schnell in Sackgassen.
Multithreading Programme unterscheiden sich meist schon vom aufbau der Dialogfelder und vom Handling gegenüber Singlethread Anwendungen. Also die wahl von Multithreading hat schon einen Einfluss auf die gestaltung der Ablaufe, den Aufbau der dialoge ... etc.
Noch paar Hinweise:
Fuer Sockets braucht man nicht zwangslaeufig Multithreading. Die Asynchronitaet kann einem das BS da abnehmen. Siehe Nicht blockierende Aufrufe. Weiss ned ob die QT das unterstuetzt ... aber ich denk scho.
Semaphoren sind die allgemeinere Variante von Mutexen. Mit semaphoren limitiert man die gleichzeitige benutzung einer ressource auf eine bestimmte Anzahl von Threads/Prozessen. Ist die Anzahl = 1, also eine ressource soll nur von einem Thread/Prozess gleichzeitig verwendet werden, dann ist das ein Mutex ! Mutexe sind aber spezieller, komfortabler und performanter als die Semaphore. Also gewoehn dir an fuer genau in dem Fall von einem Mutex zu sprechen und auch Mutexe aus den Bibs zu verwenden.
Brauchst du aber vielleicht gar nicht ....
Stell deinen socket ein ...
Connecte den Socket auf das readyRead() Signal.
Schick dein UDP packet raus ....
Mach nen eintrag in ner "Liste", das du die Anfrage rausgeschickt hasst.
bekommst du das Signal ....
Sieh dir die Daten des UDP sockets an ....
Schau mit welchen eintrag in der "Liste" das Ding matchen kann ... Entferne den Eintrag aus der Liste, werte es aus, lass den user drauf reagieren, in dem Dialogboxen aufpoppen laesst o.ä.
Passen die daten zu gar nix, ignorier sie oder bring ne fehlermeldung.
Solange du selber deinen prozessor ned in ne lange bearbeitungsschleife schickst, brauchst du eigentlich kein multithreading.
Ciao ...