Qt 多线程调用函数崩溃:跨线程访问成员变量和函数的最佳实践
可以使用Qt的信号和槽机制来实现跨线程调用函数。可以将需要访问的成员变量或函数作为参数传递给线程对象,并在线程对象内部使用该参数来访问相应的成员变量或函数。例如,在主线程中创建RunScript线程对象,并将MainWindow指针作为参数传递给它:
RunScript* runscript = new RunScript(this);
然后,在RunScript类中定义一个成员变量来存储MainWindow指针,并在构造函数中初始化它:
class RunScript : public QThread
{
Q_OBJECT
public:
explicit RunScript(MainWindow *parent = nullptr);
private:
MainWindow *m_mainWindow;
};
RunScript::RunScript(MainWindow *parent) : QThread(parent)
{
m_mainWindow = parent;
}
然后,在RunScript类中使用m_mainWindow来访问MainWindow中的成员变量或函数:
void RunScript::run()
{
// 使用m_mainWindow来访问MainWindow中的成员变量或函数
m_mainWindow->updataState();
}
最后,在MainWindow类中使用connect函数将信号和槽连接起来:
connect(this, &MainWindow::setRunDatas, runscript, &RunScript::setRunDatas);
这样,当MainWindow发出setRunDatas信号时,RunScript中的setRunDatas函数就会被调用,并使用m_mainWindow来访问MainWindow中的成员变量或函数。
原文地址: https://www.cveoy.top/t/topic/nwDn 著作权归作者所有。请勿转载和采集!