我正在用QStateMachine和ParallelState發瘋。 我有一個主要狀態(順序),其中包含第一個狀態, 第二個狀態,其中包含一組並行狀態,另一個狀態是再次順序。 第一個狀態表示創建N個輸入文件的過程,第二個狀態表示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的完成信號,但它不被調用。
謝謝你, 最好