У меня есть рабочий конечный автомат, который отправляет похожие сообщения из нескольких состояний. В настоящее время они все жестко закодированы, поэтому у меня есть фрагменты в моем файле .scxml, например:
<state id="state1">
<transition event="event_1">
<send event="unexpectedEvent1FromState1"/>
</transition>
</state>
а также
<state id="state2">
<transition event="event_2">
<send event="unexpectedEventEvent2FromState2"/>
</transition>
</state>
и я должен поймать несколько unexpectedEventXxxxFromYyyy
сообщений в другом месте моего кода на C ++.
Я бы хотел стандартизировать это сообщение, чтобы просто уловить один, параметризованный unexpectedEvent
сигнал в моем коде, который будет проверять объект QScxmlEvent, чтобы найти состояние перехода и источника, из-за которого сигнал был испущен.
Рассмотрев документацию Qt, я считаю, что мне нужно добавить модель данных. Я не использую их нигде, поэтому не знакомлюсь. Ранее я довольно успешно экспериментировал с моделью данных EcmaScript, но обнаружил, что приложение сработает на моей машине, если я попытаюсь создать более чем около 150 машин, по-видимому, из-за памяти, необходимой для более 150 двигателей V8 JavaScript. Поскольку мне нужно запустить 1000+ копий конечного автомата, исключена модель данных EcmaScript, и мне нужно использовать модель данных на C ++.
Мне не повезло с этим, и программа вылетает, когда первая машина, которую я создаю, сначала пытается обработать события. Я уменьшил код в модели данных до самых простых костей, как показано ниже, и он по-прежнему падает.
Пожалуйста, кто-нибудь скажет мне, что делать, чтобы моя модель данных работала? Я просмотрел примеры Qt, и все они кажутся слишком тривиальными, чтобы быть полезными, может ли кто-нибудь указать мне на какие-нибудь более мясистые примеры? Большое спасибо.
Изменение кодовых костей
Добавлен в корневой элемент в файле .scxml:
datamodel="cplusplus:FooDatamodel:foodatamodel.h"
foo #ifndef FOODATAMODEL_H #define FOODATAMODEL_H #include "qscxmlcppdatamodel.h" класс FooDatamodel : public QScxmlCppDataModel { Q_OBJECT Q_SCXML_DATAMODEL public : FooDatamodel (); }; #endif // FOODATAMODEL_H .h:
#include "foodatamodel.h"
FooDatamodel::FooDatamodel()
{
}
foodatamodel.cpp
datamodel
Отказ от ответственности:
datamodel
атрибут выше довольно точный.Еще раз спасибо, извинения за длину вопроса.
У меня есть рабочий конечный автомат, который отправляет похожие сообщения из нескольких состояний. В настоящее время они все жестко закодированы, поэтому у меня есть фрагменты в моем файле .scxml, например:
<state id="state1">
<transition event="event_1">
<send event="unexpectedEvent1FromState1"/>
</transition>
</state>
а также
<state id="state2">
<transition event="event_2">
<send event="unexpectedEventEvent2FromState2"/>
</transition>
</state>
и я должен поймать несколько unexpectedEventXxxxFromYyyy
сообщений в другом месте моего кода на C ++.
Я бы хотел стандартизировать это сообщение, чтобы просто уловить один, параметризованный unexpectedEvent
сигнал в моем коде, который будет проверять объект QScxmlEvent, чтобы найти состояние перехода и источника, из-за которого сигнал был испущен.
Рассмотрев документацию Qt, я считаю, что мне нужно добавить модель данных. Я не использую их нигде, поэтому не знакомлюсь. Ранее я довольно успешно экспериментировал с моделью данных EcmaScript, но обнаружил, что приложение сработает на моей машине, если я попытаюсь создать более чем около 150 машин, по-видимому, из-за памяти, необходимой для более 150 двигателей V8 JavaScript. Поскольку мне нужно запустить 1000+ копий конечного автомата, исключена модель данных EcmaScript, и мне нужно использовать модель данных на C ++.
Мне не повезло с этим, и программа вылетает, когда первая машина, которую я создаю, сначала пытается обработать события. Я уменьшил код в модели данных до самых простых костей, как показано ниже, и он по-прежнему падает.
Пожалуйста, кто-нибудь скажет мне, что делать, чтобы моя модель данных работала? Я просмотрел примеры Qt, и все они кажутся слишком тривиальными, чтобы быть полезными, может ли кто-нибудь указать мне на какие-нибудь более мясистые примеры? Большое спасибо.
Изменение кодовых костей
Добавлен в корневой элемент в файле .scxml:
datamodel="cplusplus:FooDatamodel:foodatamodel.h"
foo #ifndef FOODATAMODEL_H #define FOODATAMODEL_H #include "qscxmlcppdatamodel.h" класс FooDatamodel : public QScxmlCppDataModel { Q_OBJECT Q_SCXML_DATAMODEL public : FooDatamodel (); }; #endif // FOODATAMODEL_H .h:
#include "foodatamodel.h"
FooDatamodel::FooDatamodel()
{
}
foodatamodel.cpp
datamodel
Отказ от ответственности:
datamodel
атрибут выше довольно точный.Еще раз спасибо, извинения за длину вопроса.
00C ++, Qt, SCXML,