управляемый событиями конечный автомат + потоки: как? - PullRequest
5 голосов
/ 22 октября 2010

Я хотел бы смоделировать конечный автомат, управляемый событиями, в C, как предлагается здесь: http://en.wikipedia.org/wiki/Event-driven_finite_state_machine

Но я бы также хотел, чтобы «внешние» события обрабатывались в разных потоках.

Можно ли где-нибудь найти такой код? Или советы?

Ответы [ 2 ]

7 голосов
/ 22 октября 2010

Очереди сообщений - это способ решить вашу проблему.

Если вы хотите передать свой конечный автомат внешними событиями из других потоков, они могут записать эти события в очередь сообщений, которая будет прочитана вашим конечным автоматом.

Если вы хотите, чтобы другие потоки запускали действия с вашего конечного автомата, он может записывать в различные очереди сообщений, каждая из которых связана с потоком, который будет читать из его MQ.

Один недостаток состоит в том, что события сортируются в хронологическом порядке. Если ваш конечный автомат не настроен обработать событие, которое он только что прочитал из очереди, вы должны решить, что делать с этим событием: уничтожить его, вернуть в очередь, запомнить его для дальнейшего использования ...

5 голосов
/ 25 октября 2010

Может быть, Quantum Framework - это то, что вы ищете?См. http://state -machine.com / для получения дополнительной информации.Есть порты для многих микроконтроллеров, а также для Linux и Windows.

...