qt – QStatemachine和并行状态

我正在疯狂地使用QStateMachine和ParallelState.

我有一个包含第一个状态的主状态(顺序),

包含一组并行状态的第二状态,以及再次顺序的另一状态.

第一个状态表示创建N个输入文件的过程,第二个表示N个线程

适用于每个输入(一个文件的一个线程),最后一个状态表示生成报告的进程

整个过程(需要等待第二个状态完全完成).

好吧,问题就在于我需要在第二个状态和第三个状态之间创建障碍.我需要一些障碍

完成所有线程,我无法做到.以下文档称复合材料

状态是平行的,当所有孩子都进入最终状态时,呼叫结束.首先

在这种情况下,进入最终状态意味着什么?我是否需要为并行状态中的每个州创建最终状态?

无论如何,我试试这个,但没有.结果是当第一个线程完成时,调用我的容器的最终状态.

这是一个片段:

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,但它没有被调用.

谢谢,
最好

最佳答案 Qt文档指出:

For parallel state groups, the
QState::finished() signal is emitted
when all the child states have entered
final states.

这使我相信,不是将QFinalState连接到parallelContainerState,而是将所有子状态连接到它们自己的最终状态.

点赞