2009-08-24 7 views
3

In unserem Projekt haben wir UI und Logik (die möglicherweise als eine Zustandsmaschine dargestellt werden). Übergänge zwischen einigen Schritten in dieser Schrittmaschine sind lang (IO-gebunden). Wir möchten unseren UIhread nicht für immer stehlen, solange der Übergang stattfindet. Daher suchen wir nach einer Möglichkeit, diese Übergänge in einem separaten Thread auszuführen und anschließend die Benutzeroberfläche zu aktualisieren, wenn der Übergang beendet ist.Die Boost Statechart Library - wie man zeitaufwändige Übergänge implementiert

Ich werte derzeit die Boost Statechart-Bibliothek als eine der Optionen, um eine solche Logik zu implementieren, und ich würde gerne fragen, was ist die richtige Art und Weise zu implementieren so eine lange Übergänge Funktionalität mit ihm?

Danke.

Antwort

2

Übergänge zwischen Zuständen sollten durch ein Ereignis und nicht durch eine lange Operation ausgelöst werden.

Wenn Sie Logik haben, die irgendwelche langen Operationen überhaupt hat, wäre es besser, die Benutzeroberfläche in einen eigenen Thread zu setzen, sonst werden Sie nicht reagieren.

Sie können immer zwei unabhängige Statusmaschinen in ihren eigenen Threads haben und dann Inter-Thread-Kommunikation verwenden, um sich gegenseitig auszulösen. Message-Passing ist wahrscheinlich der zuverlässigste Ansatz. (boost::interprocess::message_queue kann übertrieben sein, aber es würde funktionieren)

Verwandte Themen