- concept for a first preliminary implementation of dispatch into the UI thread - define an integration effort to build a complete working communication chain
This commit is contained in:
parent
1e81b8d61a
commit
9b285a95c0
6 changed files with 398 additions and 41 deletions
112
src/gui/demo-gui-roundtrip.cpp
Normal file
112
src/gui/demo-gui-roundtrip.cpp
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
DemoGuiRoundtrip - placeholder to further progress of the GUI-Session connection
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2017, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
* *****************************************************/
|
||||
|
||||
|
||||
/** @file demo-gui-roundtrip.cpp
|
||||
** Dummy and scaffolding to help development of the UI - Session connection.
|
||||
** The Goal is to establish a full messaging round-trip between UI and Proc-Layer
|
||||
** - a menu entry
|
||||
** - which issues a Proc-Command
|
||||
** - which in turn accesses the Notification-facade
|
||||
** - and sends a "mark" message towards some UI demo widget
|
||||
** - which in turn displays the mark text
|
||||
**
|
||||
** @todo WIP as of 8/20176 ////////////////////////////////////////////////////////////////////////TICKET #1099
|
||||
**
|
||||
** @see CallQueue_test
|
||||
** @see notification-service.hpp
|
||||
**
|
||||
*/
|
||||
|
||||
#include "gui/gtk-base.hpp"
|
||||
|
||||
#include "lib/error.hpp"
|
||||
#include "lib/depend.hpp"
|
||||
#include "gui/ui-bus.hpp"
|
||||
#include "gui/ctrl/ui-manager.hpp"
|
||||
|
||||
#include <boost/noncopyable.hpp>
|
||||
#include <string>
|
||||
|
||||
|
||||
|
||||
//using lumiera::error::LUMIERA_ERROR_STATE;
|
||||
|
||||
using std::string;
|
||||
|
||||
|
||||
namespace gui {
|
||||
|
||||
namespace { // implementation details
|
||||
|
||||
//using util::isnil;
|
||||
using std::string;
|
||||
|
||||
} // (End) impl details
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Quick-n-dirty hack to establish a prototypic connection between Application Core and UI...
|
||||
*
|
||||
* @todo be commendable
|
||||
* @todo don't misbehave
|
||||
*
|
||||
* @see SomeSystem
|
||||
* @see CallQueue_test
|
||||
*/
|
||||
class DemoGuiRoundtrip
|
||||
: boost::noncopyable
|
||||
{
|
||||
string nothing_;
|
||||
|
||||
DemoGuiRoundtrip();
|
||||
~DemoGuiRoundtrip();
|
||||
|
||||
friend class lib::DependencyFactory;
|
||||
|
||||
public:
|
||||
/** access point to set up the scaffolding.
|
||||
* @internal this is a development helper and will be remoulded all the time.
|
||||
*/
|
||||
static lib::Depend<DemoGuiRoundtrip> instance;
|
||||
|
||||
|
||||
/* == X interface for == */
|
||||
|
||||
/* == Adapter interface for == */
|
||||
|
||||
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1099
|
||||
void setSolution (string const& solution = "")
|
||||
{
|
||||
UNIMPLEMENTED ("tbw");
|
||||
if (isDeaf())
|
||||
this->transmogrify (solution);
|
||||
}
|
||||
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1099
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace gui
|
||||
|
|
@ -56,9 +56,9 @@
|
|||
** ## the generic interface element API
|
||||
**
|
||||
** The _generic interface element_ based on [Tangible](\ref model::Tangible) covers a set of behaviour
|
||||
** common to all elements of the interface. This behaviour is targeted towards the _integration_
|
||||
** common to all elements of the interface. This behaviour is targeted towards the _integration_
|
||||
** with the core application. Beyond that, there are still several concerns regarding presentation,
|
||||
** like a common styling. These are addressed the conventional way, through a common \ref UiManager.
|
||||
** like a common styling. These are addressed the conventional way, through a common \ref StyleManager.
|
||||
** The following discussion focuses on the aspects of integration with the core.
|
||||
**
|
||||
** For one reason or another, any element in the UI can appear and go away.
|
||||
|
|
@ -67,9 +67,9 @@
|
|||
** In regular, operative state, an interface element may initiate _actions_, which translate
|
||||
** into _commands_ at the session interface. To complicate matters, there might be higher-level,
|
||||
** cooperative _gestures_ implemented within the interface, leading to actions being formed
|
||||
** similar to sentences of spoken language, with the help of a FocusConcept -- this means,
|
||||
** in the end, there is a _subject_ and a _predicate_. These need to be bound in order to
|
||||
** form an _action_. And some interface element takes on or relates to the role of the
|
||||
** similar to sentences of spoken language, with the help of a _focus concept_ -- anyway, this
|
||||
** means, in the end, there is a _subject_ and a _predicate_. These need to be bound in order
|
||||
** to form an _action_. And some interface element takes on or relates to the role of the
|
||||
** underlying, the subject, the **tangible element**.
|
||||
**
|
||||
** @todo Some actions are very common and can be represented by a shorthand.
|
||||
|
|
@ -82,10 +82,10 @@
|
|||
** expanding and collapsing, moving by focus or manipulation of a similar presentation control.
|
||||
** These manipulations in itself do not constitute an action. But there typically is some widget
|
||||
** or controller, which is responsible for the touched presentation state. If this entity judges
|
||||
** the state change to be relevant and persistent, it may [send](\ref BusTerm::note()) a **state mark**
|
||||
** into the UI-Bus -- expecting this marked state to be remembered.
|
||||
** In turn this means the bus terminal might feed a state mark back into the tangible element,
|
||||
** expecting this state to be restored.
|
||||
** the state change to be relevant and persistent, it may [send](\ref BusTerm::note()) a
|
||||
** **state mark** into the UI-Bus -- expecting this marked state to be remembered.
|
||||
** In turn this means the bus terminal might feed a state mark back into the
|
||||
** tangible element, expecting this state to be restored.
|
||||
**
|
||||
** A special case of state marking is the presentation of _transient feedback._
|
||||
** Such feedback is pushed from "somewhere" towards given elements, which react through an
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ namespace ctrl {
|
|||
* "state mark" messages. This assumes the presence of some dedicated
|
||||
* presentation state manager, attached and listening somewhere at
|
||||
* a core service location. Such a core presentation state service
|
||||
* has shares additional understanding of the state mark's meaning;
|
||||
* has additional shared understanding of the state mark's meaning;
|
||||
* it is assumed to track cumulated state, which will be replayed
|
||||
* later when it comes to restoring some presentation state.
|
||||
*/
|
||||
|
|
@ -165,13 +165,13 @@ namespace ctrl {
|
|||
/** route a state update or notification to the given subject.
|
||||
* @param subject the [endpoint-ID](BusTerm::endpointID_) of the element to address
|
||||
* @param mark the actual state update or notification message to be delivered
|
||||
* @remarks each "subject" to be addressed is a gui::model::Tangible, and as such
|
||||
* holds a BusTerm of its own, which in turn ensures a registration and
|
||||
* connection from the [central routing hub](gui::ctrl::Nexus) down to
|
||||
* the element. Thus, the default implementation is just to pass the
|
||||
* given state mark "up", assuming that it will reach the hub
|
||||
* eventually, which in turn knows hot to reach the element.
|
||||
* @return if the target was known and the mark operation dispatched.
|
||||
* @remarks each addressed "subject" is a gui::model::Tangible, and as such holds
|
||||
* a BusTerm of its own, which in turn ensures a registration and connection
|
||||
* from the [central routing hub](gui::ctrl::Nexus) down to the element. Thus,
|
||||
* the default implementation is just to pass the given state mark "up",
|
||||
* assuming that it will reach the hub eventually, which in turn knows
|
||||
* how to reach the element, and invoke the Tangible::mark() operation.
|
||||
* @return `true` if the target was known and the mark operation dispatched.
|
||||
* @note messages to unreachable elements will be dropped.
|
||||
*/
|
||||
bool
|
||||
|
|
|
|||
63
src/lib/call-queue.hpp
Normal file
63
src/lib/call-queue.hpp
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
CALL-QUEUE.hpp - a queue to dispatch bound function invocations into another thread
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2017, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
|
||||
/** @file call-queue.hpp
|
||||
** A Queue for function invocations, allowing them to be dispatched on demand.
|
||||
** Typically this queue helper is used to forward lambdas into another thread, e.g.
|
||||
** the UI thread for execution.
|
||||
**
|
||||
** @todo simplistic braindead implementation with locking and heap based storage
|
||||
** based on std::function; should use a lock-fee queue and should have an eye
|
||||
** on the impact of managing argument storage
|
||||
**
|
||||
** @see gui::NotificationService usage example
|
||||
*/
|
||||
|
||||
|
||||
#ifndef LIB_CALL_QUEUE_H
|
||||
#define LIB_CALL_QUEUE_H
|
||||
|
||||
|
||||
#include "lib/error.hpp"
|
||||
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
|
||||
namespace lib {
|
||||
|
||||
|
||||
|
||||
/*********************************************************//**
|
||||
* A threadsafe queue for bound `void(void)` functors.
|
||||
* Typically used to dispatch function invocations together with
|
||||
* their concrete parameters into another thread for invocation.
|
||||
*/
|
||||
struct CallQueue
|
||||
: boost::noncopyable
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace lib
|
||||
#endif /*LIB_CALL_QUEUE_H*/
|
||||
103
tests/library/call-queue-test.cpp
Normal file
103
tests/library/call-queue-test.cpp
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
/*
|
||||
CallQueue(Test) - verify queue based dispatch of bound function objects
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2017, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
* *****************************************************/
|
||||
|
||||
/** @file call-queue-test.cpp
|
||||
** unit test \ref CallQueue_test
|
||||
*/
|
||||
|
||||
|
||||
#include "lib/test/run.hpp"
|
||||
#include "lib/util.hpp"
|
||||
#include "lib/format-cout.hpp"
|
||||
|
||||
#include "lib/call-queue.hpp"
|
||||
|
||||
#include <functional>
|
||||
//#include <vector>
|
||||
#include <string>
|
||||
|
||||
|
||||
|
||||
namespace lib {
|
||||
namespace test{
|
||||
|
||||
using util::cStr;
|
||||
using std::bind;
|
||||
using std::string;
|
||||
|
||||
|
||||
|
||||
namespace { // test data
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**********************************************************************************//**
|
||||
* @test verify a helper component for dispatching functors through a threadsafe queue.
|
||||
* - simple usage
|
||||
* - enqueue and dequeue several functors
|
||||
* - multithreaded stress test
|
||||
*
|
||||
* @see lib::CallQueue
|
||||
* @see gui::NotificationService usage example
|
||||
* @see [DemoGuiRoundtrip]: http://issues.lumiera.org/ticket/1099 "Ticket #1099"
|
||||
*/
|
||||
class CallQueue_test : public Test
|
||||
{
|
||||
|
||||
virtual void
|
||||
run (Arg)
|
||||
{
|
||||
verify_SimpleUse();
|
||||
verify_Consistency();
|
||||
verify_ThreadSafety();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
verify_SimpleUse ()
|
||||
{
|
||||
UNIMPLEMENTED("verify_SimpleUse");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
verify_Consistency ()
|
||||
{
|
||||
UNIMPLEMENTED("verify_Consistency");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
verify_ThreadSafety()
|
||||
{
|
||||
UNIMPLEMENTED("verify_ThreadSafety");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/** Register this test class... */
|
||||
LAUNCHER (CallQueue_test, "unit common");
|
||||
|
||||
|
||||
}} // namespace lib::test
|
||||
|
|
@ -38,7 +38,14 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1481320590214" ID="ID_635303062" MODIFIED="1501775856249" TEXT="DummySessionConnection">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1501940591109" ID="ID_1925240675" MODIFIED="1501940773195" TEXT="#1099 DemoGuiRoundtrip">
|
||||
<arrowlink COLOR="#e5e53f" DESTINATION="ID_1007296291" ENDARROW="Default" ENDINCLINATION="-767;134;" ID="Arrow_ID_1440938291" STARTARROW="None" STARTINCLINATION="-51;592;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1501940627280" ID="ID_1675066241" MODIFIED="1501940632019" TEXT="Dummy-Code im UI"/>
|
||||
<node CREATED="1501940632871" ID="ID_189611570" MODIFIED="1501940638539" TEXT="Dummy Proc-Command"/>
|
||||
<node CREATED="1501940639479" ID="ID_1314787910" MODIFIED="1501940644506" TEXT="komplettes Ping-Pong"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1481320590214" ID="ID_635303062" MODIFIED="1501866686821" TEXT="DummySessionConnection">
|
||||
<arrowlink COLOR="#f9b709" DESTINATION="ID_1343270939" ENDARROW="Default" ENDINCLINATION="123;-106;" ID="Arrow_ID_1867016690" STARTARROW="None" STARTINCLINATION="-144;215;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1481320639544" ID="ID_1440497947" MODIFIED="1481320641675" TEXT="Singleton"/>
|
||||
|
|
@ -50,7 +57,7 @@
|
|||
<node CREATED="1477784793993" ID="ID_1868522177" MODIFIED="1487464677579" TEXT="Umbau">
|
||||
<linktarget COLOR="#bc4930" DESTINATION="ID_1868522177" ENDARROW="Default" ENDINCLINATION="221;282;" ID="Arrow_ID_600425644" SOURCE="ID_707273464" STARTARROW="None" STARTINCLINATION="1925;196;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node CREATED="1477784813895" ID="ID_1343270939" MODIFIED="1501775856249" TEXT="Model durch UI-Bus ersetzen">
|
||||
<node CREATED="1477784813895" ID="ID_1343270939" MODIFIED="1501866689972" TEXT="Model durch UI-Bus ersetzen">
|
||||
<linktarget COLOR="#f9b709" DESTINATION="ID_1343270939" ENDARROW="Default" ENDINCLINATION="123;-106;" ID="Arrow_ID_1867016690" SOURCE="ID_635303062" STARTARROW="None" STARTINCLINATION="-144;215;"/>
|
||||
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1343270939" ENDARROW="Default" ENDINCLINATION="-197;638;" ID="Arrow_ID_1686519160" SOURCE="ID_202253849" STARTARROW="Default" STARTINCLINATION="-83;-1020;"/>
|
||||
<node COLOR="#338800" CREATED="1481320683706" ID="ID_1226263415" MODIFIED="1481331062143" TEXT="klären, wo der Bus aufgehängt wird">
|
||||
|
|
@ -286,21 +293,16 @@
|
|||
<node CREATED="1481502335583" ID="ID_1245191241" MODIFIED="1481502372882" TEXT="Felder im GuiRunner sollten noexcept sein">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1484793048273" ID="ID_66499328" MODIFIED="1484793095620" TEXT="verschoben">
|
||||
<arrowlink COLOR="#4072ad" DESTINATION="ID_1019455888" ENDARROW="Default" ENDINCLINATION="-334;0;" ID="Arrow_ID_693735378" STARTARROW="None" STARTINCLINATION="-45;-19;"/>
|
||||
<node CREATED="1484793048273" ID="ID_66499328" MODIFIED="1501866674511" TEXT="verschoben">
|
||||
<arrowlink COLOR="#4072ad" DESTINATION="ID_1019455888" ENDARROW="Default" ENDINCLINATION="-334;0;" ID="Arrow_ID_693735378" STARTARROW="None" STARTINCLINATION="-131;33;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1481502305995" ID="ID_1943234904" MODIFIED="1501861849914" TEXT="in CoreService verschieben">
|
||||
<linktarget COLOR="#f60105" DESTINATION="ID_1943234904" ENDARROW="Default" ENDINCLINATION="26;102;" ID="Arrow_ID_1614905902" SOURCE="ID_944281372" STARTARROW="None" STARTINCLINATION="71;-35;"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
<node CREATED="1484793022924" ID="ID_1019455888" MODIFIED="1484793099044" TEXT="GuiNotificattion ist jetzt Feld in CoreService">
|
||||
<linktarget COLOR="#4072ad" DESTINATION="ID_1019455888" ENDARROW="Default" ENDINCLINATION="-334;0;" ID="Arrow_ID_693735378" SOURCE="ID_66499328" STARTARROW="None" STARTINCLINATION="-45;-19;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1481502305995" ID="ID_1943234904" MODIFIED="1501866681942" TEXT="direkt vom UiManager betrieben">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1484793113472" ID="ID_221612387" MODIFIED="1501854310860" TEXT="Lebenszyklus nochmal prüfen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1484797253856" ID="ID_226245696" MODIFIED="1484871281624" TEXT="GUI start sauber">
|
||||
<node COLOR="#338800" CREATED="1484797253856" FOLDED="true" ID="ID_226245696" MODIFIED="1501867196568" TEXT="GUI start sauber">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1484797307376" ID="ID_842106541" MODIFIED="1501854459425" TEXT="Abfolge">
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
@ -473,7 +475,7 @@
|
|||
</node>
|
||||
</node>
|
||||
<node CREATED="1501858109615" ID="ID_747885327" MODIFIED="1501858113122" TEXT="UI-Facaden">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1501858114023" ID="ID_749414376" MODIFIED="1501859737468">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1501858114023" ID="ID_749414376" MODIFIED="1501866697133">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -504,23 +506,26 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1484793022924" ID="ID_1019455888" MODIFIED="1501866674511" TEXT="neuer Facade-Kontext">
|
||||
<linktarget COLOR="#4072ad" DESTINATION="ID_1019455888" ENDARROW="Default" ENDINCLINATION="-334;0;" ID="Arrow_ID_693735378" SOURCE="ID_66499328" STARTARROW="None" STARTINCLINATION="-131;33;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1501866627055" ID="ID_1521184600" MODIFIED="1501866631727" TEXT="RAII-Stil"/>
|
||||
<node CREATED="1501866591164" ID="ID_751026549" MODIFIED="1501866609933" TEXT="öffnet/schließt die öffentlichen Interfaces"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1501861805378" HGAP="93" ID="ID_944281372" MODIFIED="1501861855154" TEXT="TODO: sonstwohin schieben" VSHIFT="-15">
|
||||
<arrowlink COLOR="#f60105" DESTINATION="ID_1943234904" ENDARROW="Default" ENDINCLINATION="26;102;" ID="Arrow_ID_1614905902" STARTARROW="None" STARTINCLINATION="71;-35;"/>
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
</node>
|
||||
<node CREATED="1481502251450" FOLDED="true" HGAP="96" ID="ID_1125529151" MODIFIED="1501791742395" TEXT="möglicher Race" VSHIFT="16">
|
||||
<node CREATED="1481502251450" FOLDED="true" HGAP="96" ID="ID_1125529151" MODIFIED="1501867204524" TEXT="möglicher Race" VSHIFT="16">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1484797174890" ID="ID_986391148" MODIFIED="1484797217827" TEXT="Exception killt GUI bevor GuiNotification offen ist">
|
||||
<node CREATED="1484797174890" ID="ID_986391148" MODIFIED="1501866950169" TEXT="triggerShutdown() kommt bevor GuiNotification offen ist">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1484797210597" ID="ID_1555304752" MODIFIED="1501791740076" TEXT="ist das überhaupt ein Problem">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1484797230051" ID="ID_590420902" MODIFIED="1484797240465" TEXT="sigTerm stammt vom UI-Thread">
|
||||
<node CREATED="1484797230051" ID="ID_590420902" MODIFIED="1501867015456" TEXT="ja, weil dann das GUI weiterläuft">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1501867017251" ID="ID_1980251688" MODIFIED="1501867026046" TEXT="...und der shutdown-Prozeß blockt"/>
|
||||
</node>
|
||||
<node CREATED="1481502257825" HGAP="24" ID="ID_232782099" MODIFIED="1487275489314" TEXT="Gefahr gering" VSHIFT="11">
|
||||
<node CREATED="1481502257825" HGAP="24" ID="ID_232782099" MODIFIED="1501867179321" TEXT="Gefahr gering, aber gegeben" VSHIFT="11">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -535,8 +540,30 @@
|
|||
<p>
|
||||
startende Funktion zurückkehrt.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
Daher können wir zumindest annehmen, daß die ganze Initialisierung
|
||||
</p>
|
||||
<p>
|
||||
bereits läuft, wenn die start()-Funktion mit true (Erfolg) zurückkommt.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
Allerdings ist <i>definitiv</i> ein Race gegeben, und wenn
|
||||
</p>
|
||||
<p>
|
||||
direkt beim Starten anderer Subsysteme nach dem GUI etwas schiefläuft,
|
||||
</p>
|
||||
<p>
|
||||
dann kann der Shutdown-Prozeß den Start des GUI überholen.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1484797646771" HGAP="44" ID="ID_1605520996" MODIFIED="1493752929690" TEXT="Ausgestaltung" VSHIFT="10">
|
||||
|
|
@ -782,7 +809,7 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1501859470962" ID="ID_99706930" MODIFIED="1501859737468">
|
||||
<node CREATED="1501859470962" ID="ID_99706930" MODIFIED="1501866697132">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -857,7 +884,12 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1501781769834" ID="ID_1836544616" MODIFIED="1501781774741" TEXT="direktes Wiring?"/>
|
||||
<node CREATED="1501781769834" ID="ID_1836544616" MODIFIED="1501866470036" TEXT="direktes Wiring?">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1501866473852" ID="ID_1346430403" MODIFIED="1501866480351" TEXT="direkt den UiManager aufrufen"/>
|
||||
<node CREATED="1501866480963" ID="ID_361033579" MODIFIED="1501866493949" TEXT="dazu die NotificationFacade verschoben"/>
|
||||
<node CREATED="1501866494441" ID="ID_540781053" MODIFIED="1501866503828" TEXT="wird jetzt vom UiManager gemanaged"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1501792024717" ID="ID_1914400893" MODIFIED="1501792029128" TEXT="wer ist "wir"?">
|
||||
<node CREATED="1501792033763" ID="ID_1293774586" MODIFIED="1501792040334" TEXT="der Subsystem-Lebenszyklus"/>
|
||||
|
|
@ -979,6 +1011,53 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1501867225983" ID="ID_1121867075" MODIFIED="1501867252021">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
brauche dedizierten <b>Dispatcher</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1501938738836" ID="ID_1257499857" MODIFIED="1501940794505" TEXT="Helper: CallQueue">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1501938715247" ID="ID_1286525769" MODIFIED="1501938725574" TEXT="simplistic">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1501938699841" ID="ID_1077640328" MODIFIED="1501938704702" TEXT="std::function"/>
|
||||
<node CREATED="1501938690626" ID="ID_353231581" MODIFIED="1501938729247" TEXT="thread safe queue"/>
|
||||
<node CREATED="1501938705321" ID="ID_1924064403" MODIFIED="1501938711076" TEXT="lambdas für Argument-binding"/>
|
||||
</node>
|
||||
<node CREATED="1501938776839" ID="ID_1031878628" MODIFIED="1501938783474" TEXT="Anwendung explizit">
|
||||
<node CREATED="1501939110138" ID="ID_203135379" MODIFIED="1501939129491" TEXT="Lambda konstruieren"/>
|
||||
<node CREATED="1501939132431" ID="ID_1400757157" MODIFIED="1501939149321" TEXT="Funktion zum Triggern"/>
|
||||
<node CREATED="1501939149837" ID="ID_1733976265" MODIFIED="1501939157472" TEXT="diese an Glib::Dispatcher binden"/>
|
||||
</node>
|
||||
<node CREATED="1501939160907" ID="ID_188350210" MODIFIED="1501939167821" TEXT="Convenience-Wrapper">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1501939174506" ID="ID_504999068" MODIFIED="1501939191040" TEXT="in NotificationService integrieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node CREATED="1501939193031" HGAP="3" ID="ID_1045913810" MODIFIED="1501939200829" TEXT="Test" VSHIFT="20">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1501939204166" ID="ID_383444966" MODIFIED="1501939211537" TEXT="CallQueue_test"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1501939212693" ID="ID_1007296291" MODIFIED="1501940740143" TEXT="#1099 DemoGuiRoundtrip">
|
||||
<linktarget COLOR="#e5e53f" DESTINATION="ID_1007296291" ENDARROW="Default" ENDINCLINATION="-767;134;" ID="Arrow_ID_1440938291" SOURCE="ID_1925240675" STARTARROW="None" STARTINCLINATION="-51;592;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1501939235834" ID="ID_1160414548" MODIFIED="1501939239653" TEXT="Menü-Eintrag"/>
|
||||
<node CREATED="1501939240217" ID="ID_325602880" MODIFIED="1501939252187" TEXT="triggert Proc-Command"/>
|
||||
<node CREATED="1501939252991" ID="ID_31140909" MODIFIED="1501939261802" TEXT="dieses sendet Mark zurück"/>
|
||||
<node CREATED="1501939263030" ID="ID_381890207" MODIFIED="1501939271161" TEXT="ein Widget im UI reagiert"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1501804850624" ID="ID_1451522246" MODIFIED="1501804855579" TEXT="Zugang zum UiManager"/>
|
||||
</node>
|
||||
|
|
@ -11546,7 +11625,7 @@
|
|||
<node CREATED="1485548878292" ID="ID_49934573" MODIFIED="1485548882087" TEXT="Broadcast"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1453545812389" HGAP="43" ID="ID_202253849" MODIFIED="1487275491177" TEXT="Core-Services" VSHIFT="2">
|
||||
<node CREATED="1453545812389" HGAP="43" ID="ID_202253849" MODIFIED="1501866689972" TEXT="Core-Services" VSHIFT="2">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue