我正在疯狂地使用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,而是将所有子状态连接到它们自己的最终状态.