Library/Application: switch the GUI-Thread
...likewise using an detached »autonomous« Thread. In this case however it is simpler to embed the complete use of GtkLumiera into a lambda function, which ends with invoking the terminationSignal functor. This way, the order of creation, running the GTK-Loop and destroying the GUI is hard coded.
This commit is contained in:
parent
5db49afafd
commit
184c93750a
2 changed files with 78 additions and 27 deletions
|
|
@ -49,10 +49,10 @@
|
|||
#include "stage/gtk-base.hpp"
|
||||
|
||||
#include "lib/error.hpp"
|
||||
#include "lib/thread.hpp"
|
||||
#include "stage/ui-bus.hpp"
|
||||
#include "stage/guifacade.hpp"
|
||||
#include "stage/ctrl/ui-manager.hpp"
|
||||
#include "vault/thread-wrapper.hpp"
|
||||
#include "common/subsys.hpp"
|
||||
#include "lib/nocopy.hpp"
|
||||
|
||||
|
|
@ -65,8 +65,8 @@ extern "C" {
|
|||
|
||||
|
||||
|
||||
using vault::Thread;
|
||||
using lumiera::Subsys;
|
||||
using lib::launchDetached;
|
||||
using lumiera::error::LUMIERA_ERROR_STATE;
|
||||
using stage::LUMIERA_INTERFACE_INAME(lumieraorg_Gui, 1);
|
||||
|
||||
|
|
@ -128,28 +128,24 @@ namespace stage {
|
|||
return errorMsgBuff;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
void
|
||||
runGUI (Subsys::SigTerm reportOnTermination) ///< this is the UI-Thread
|
||||
{
|
||||
string shutdownLog = GtkLumiera{}.run();
|
||||
|
||||
// inform main thread that the GUI has been shut down...
|
||||
reportOnTermination (&shutdownLog);
|
||||
}//(End) GUI-Thread.
|
||||
|
||||
//(End) GUI-Thread.
|
||||
}//(End) impl details
|
||||
|
||||
|
||||
|
||||
|
||||
bool
|
||||
launchUI (Subsys::SigTerm& terminationHandle)
|
||||
launchUI (Subsys::SigTerm& reportOnTermination)
|
||||
{
|
||||
try
|
||||
{
|
||||
Thread {"GUI-Main", bind (&runGUI, terminationHandle)}; ///////////////////////////////////////////OOO this shows we need a self-contained and detached thread!
|
||||
launchDetached ("GUI-Main"
|
||||
, [reportOnTermination]
|
||||
{
|
||||
string shutdownLog = GtkLumiera{}.run();
|
||||
// inform main thread that the GUI has been shut down...
|
||||
reportOnTermination (&shutdownLog);
|
||||
});
|
||||
return true; // if we reach this line...
|
||||
}
|
||||
catch(...)
|
||||
|
|
|
|||
|
|
@ -65010,7 +65010,7 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1696468379848" ID="ID_1146069423" MODIFIED="1697054187170" TEXT="Ergänzung: autonomous Thread">
|
||||
<linktarget COLOR="#bc3562" DESTINATION="ID_1146069423" ENDARROW="Default" ENDINCLINATION="444;909;" ID="Arrow_ID_516910789" SOURCE="ID_137837629" STARTARROW="None" STARTINCLINATION="-1280;-32;"/>
|
||||
<linktarget COLOR="#5a83aa" DESTINATION="ID_1146069423" ENDARROW="Default" ENDINCLINATION="444;909;" ID="Arrow_ID_516910789" SOURCE="ID_137837629" STARTARROW="None" STARTINCLINATION="-1280;-32;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#435e98" CREATED="1696468398477" ID="ID_1775921981" MODIFIED="1696966299356" TEXT="neue Anforderung: komplett abgekoppelt">
|
||||
<icon BUILTIN="yes"/>
|
||||
|
|
@ -66293,7 +66293,8 @@
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1696893013891" ID="ID_1856740667" MODIFIED="1697068782982" TEXT="damit bestehende Probleme im Applikations-Code lösen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1696893026770" ID="ID_253995958" MODIFIED="1696893031336" TEXT="GtkLumiera">
|
||||
<node COLOR="#338800" CREATED="1696893026770" ID="ID_253995958" MODIFIED="1697079847058" TEXT="GtkLumiera">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1696893056374" MODIFIED="1696893056374" TEXT="Variante-1"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1696893037535" ID="ID_1340852722" MODIFIED="1697068777127" TEXT="OutputDirector">
|
||||
|
|
@ -81506,11 +81507,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1696538756712" ID="ID_1037865278" LINK="#ID_1688404846" MODIFIED="1696541639911" TEXT="ThreadWrapperAutonomous_test">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1696538756712" ID="ID_1037865278" LINK="#ID_1688404846" MODIFIED="1697079830508" TEXT="ThreadWrapperAutonomous_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1696538825003" ID="ID_1146104670" LINK="#ID_1787030725" MODIFIED="1696538953992" TEXT="ThreadWrapperLifecycle_test">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1696538825003" ID="ID_1146104670" LINK="#ID_1787030725" MODIFIED="1697079831677" TEXT="ThreadWrapperLifecycle_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1695394753483" FOLDED="true" ID="ID_1338410455" MODIFIED="1696030309964" TEXT="SyncBarrier_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -82464,13 +82465,67 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1696029465121" ID="ID_786350998" MODIFIED="1696541244997" TEXT="gtk-lumiera.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1696468041645" ID="ID_137837629" MODIFIED="1696541241831" TEXT="brauche einen Thread, den man in den Hintergrund schieben kann">
|
||||
<arrowlink COLOR="#bc3562" DESTINATION="ID_1146069423" ENDARROW="Default" ENDINCLINATION="444;909;" ID="Arrow_ID_516910789" STARTARROW="None" STARTINCLINATION="-1280;-32;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1696029465121" ID="ID_786350998" MODIFIED="1697079789466" TEXT="gtk-lumiera.cpp">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1696468041645" ID="ID_137837629" MODIFIED="1697079810297" TEXT="brauche einen Thread, den man in den Hintergrund schieben kann">
|
||||
<arrowlink COLOR="#5a83aa" DESTINATION="ID_1146069423" ENDARROW="Default" ENDINCLINATION="444;909;" ID="Arrow_ID_516910789" STARTARROW="None" STARTINCLINATION="-1280;-32;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#5b280f" CREATED="1697074837137" ID="ID_1676366081" MODIFIED="1697079198786" TEXT="umstellen auf ein self-managed Thread-Objekt">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1697074871061" ID="ID_1947484765" MODIFIED="1697074877752" TEXT="die stateische Methode runGUI fällt weg"/>
|
||||
<node CREATED="1697074879331" ID="ID_1600154985" MODIFIED="1697074890470" TEXT="dafür erbt GtkLumiera nun von ThreadHookable"/>
|
||||
<node CREATED="1697074891490" ID="ID_1903908027" MODIFIED="1697074909875" TEXT="muß unbedingt eine Sync-Barrier einziehen">
|
||||
<node CREATED="1697074911127" ID="ID_359674865" MODIFIED="1697074931129" TEXT="sonst sind die GUI-Komponenten nicht rechtzeitig fertig"/>
|
||||
<node CREATED="1697074933422" ID="ID_1367938500" MODIFIED="1697074943014" TEXT="vor allem werden hier noch dynamische Libs geladen">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1696468692302" ID="ID_1299573982" MODIFIED="1697068881651" TEXT="SteamDispatcher und OutputDirector brauchen das ebenso">
|
||||
<node COLOR="#5b280f" CREATED="1697074948090" ID="ID_1670658341" MODIFIED="1697074961262" TEXT="SyncBarrier als Parameter übergeben">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
<node CREATED="1697074962089" ID="ID_1822899395" MODIFIED="1697074967947" TEXT="stattdessen als globale Variable"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d1bba1" COLOR="#990000" CREATED="1697074973343" ID="ID_1959135730" MODIFIED="1697079190318" TEXT="Probleme beim Shutdown">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1697074982953" ID="ID_442353467" MODIFIED="1697075045858" TEXT="anscheinend werden Teile des GUI erst nach dem Ende von Lumiera-Main abgebaut">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1697079081169" ID="ID_265281556" MODIFIED="1697079119273" TEXT="das heißt: sigTerm wurde zu früh aufgerufen ⟹ Kontrakt gebrochen"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1697079120028" ID="ID_1679819691" MODIFIED="1697079140133">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
das ist jetzt alles <b>keine Verbesserung</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1697079202857" ID="ID_1873620369" MODIFIED="1697079742143" TEXT="die alte Lösung war gar nicht so schlecht">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1697079212001" ID="ID_358578864" MODIFIED="1697079225323">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
sie sieht bloß »umständlich« aus
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1697079226102" ID="ID_1747368145" MODIFIED="1697079235936" TEXT="der Vorteil: die Reihenfolge ist explizit festgelegt"/>
|
||||
<node CREATED="1697079242804" ID="ID_440022982" MODIFIED="1697079265220" TEXT="der Thread umschließt die gesamte GUI-Funktionalität"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1697079753844" ID="ID_1211321573" MODIFIED="1697079778251" TEXT="Umstellung: runGUI ⟶ in λ packen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1697079779058" ID="ID_370018589" MODIFIED="1697079784793" TEXT="tut">
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1696468692302" ID="ID_1299573982" MODIFIED="1697079748206" TEXT="SteamDispatcher und OutputDirector brauchen das ebenso">
|
||||
<arrowlink COLOR="#1f9fe7" DESTINATION="ID_871343805" ENDARROW="Default" ENDINCLINATION="173;10;" ID="Arrow_ID_1685700346" STARTARROW="None" STARTINCLINATION="-8;8;"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue