2009-08-24 6 views
3

Dans notre projet, nous avons l'interface utilisateur et la logique (qui peut être représentée comme une machine d'état). Les transitions entre certaines étapes de cette machine à étapes sont longues (liées à l'E/S). Nous ne voulons pas voler notre thread d'interface utilisateur pendant tout le temps que la transition est en cours. Par conséquent, nous recherchons un moyen d'effectuer ces transitions dans un thread distinct, puis de mettre à jour l'interface utilisateur à la fin de la transition. J'évalue actuellement la bibliothèque d'état-major boost comme l'une des options pour mettre en œuvre une telle logique et je voudrais demander quelle est la bonne façon d'implémenter une telle fonctionnalité de transitions à long terme en l'utilisant?La Boost Statechart Library - comment implémenter des transitions chronophages

Merci.

Répondre

2

Les transitions entre états doivent être déclenchées par un événement et non par une opération longue.

Si vous avez une logique qui a des opérations longues, il serait préférable de mettre l'interface utilisateur dans son propre thread, sinon vous ne répondrez pas.

Vous pouvez toujours avoir deux machines d'état indépendantes dans leurs propres threads, puis utiliser des communications inter-thread pour chaque déclencheur. La transmission de messages est probablement l'approche la plus fiable. (boost::interprocess::message_queue peut être exagéré mais cela fonctionnerait)

Questions connexes