Я схожу с ума с QStateMachine wth ParallelState. У меня есть основное состояние (последовательное), которое содержит первое состояние, второе состояние, которое содержит группу параллельных состояний, и другое состояние, которое снова является последовательным. Первое состояние представляет собой процесс, который создает N входных файлов, второй представляет N потоков, которые работает над каждым вводом (один поток для одного файла), а последнее состояние представляет собой процесс, который генерирует отчет общий процесс (необходимо дождитесь завершения второго состояния). Ну, проблема в том, что мне нужно создать барьер между вторым и третьим. Мне нужно некоторое препятствие для того, чтобы заполнить все темы, и я не могу этого сделать. В следующей документации говорится, что составное состояние , которое является параллельным, завершает вызов, когда все его дети входят в конечное состояние. Прежде всего Что это значит, в этом случае, вступая в конечное состояние? Может мне нужно создать конечное состояние для каждого состояния внутри моего параллельного состояния? В любом случае я пробую это, но ничего. В результате, когда первый поток заканчивается, вызывается конечное состояние моего контейнера.QStatemachine и параллельные состояния
Это фрагмент:
QState *mainState = new QState(QState::ExclusiveStates);
// Create the first state associated to the first process
QState *firstState = new QState(mainState);
QObject::connect(firstState, SIGNAL(entered()), this, SLOT(executeFirstProcess()));
// parallel container state
QState *parallelContainerState = new QState(QState::ParallelStates, mainState);
firstState->addTransition(this, SIGNAL(goToNextStep()), parallelContainerState);
QFinalState *parallelFinalState = new QFinalState(parallelContainerState);
int parallelStepCounter = 0;
for(;parallelStepCounter < 5; parallelStepCounter++) {
QState *pState = new QState(parallelContainerState);
QObject::connect(pState, SIGNAL(entered()), this, SLOT(executePState()));
pState->addTransition(pState, SIGNAL(finished()), parallelFinalState);
}
QState *reportState = new QState(mainState);
QObject::connect(reportState, SIGNAL(entered()), this, SLOT(generateReport()));
parallelContainerState->addTransition(parallelContainerState, SIGNAL(finished()), reportState);
... set initial state, start machine bla bla...
Как можно ждать, что второе состояние полностью закончена? Я также пытаюсь использовать QObject :: connect с готовым сигналом каждого pState, но он не называется.
спасибо, лучшей