我有一个调用堆栈来执行繁重的计算:
// QML
StyledButton {
onButtonClicked: {
registeredCppClass.undoHandler.createCommand()
}
}
void UndoHandler::createCommand()
{
m_undoStack->push(new Command());
}
class Command : public QUndoCommand
{
public:
Command();
virtual ~Command();
virtual void undo();
virtual void redo();
// ...
private:
// Handler does the logic
LogicHandler *m_logicHandler;
// Output by logic handler
QString m_outputName;
};
void Command::redo()
{
if (/* */) {
} else {
// Run heavy computation
m_outputName = m_logicHandler->run();
}
}
QString LogicHandler::run()
{
// Heavy computation starts
}
意图
我想要采用这个方法来实现QThread
,以避免在执行大量计算时使GUI无响应。但是我不知道QThread
和Worker
类需要放置在哪里进行实现。它们应该位于以下哪里:
UndoHandler::createCommand
Command::redo
LogicHandler::run
- ... ?
考虑到它们的信号槽连接,最佳的QThread
和Worker
位置是什么?
UndoCommand
类拥有逻辑处理程序,因此在同一类中启动新线程并将逻辑处理程序放入构造函数中对我来说是有意义的。一个缺点是当命令销毁时(这可能经常发生),您必须调用线程wait()
,这可能需要时间。 - Minh