QT新开线程中需要使用主线程的变量
程序员文章站
2022-06-10 23:47:52
...
线程创建
线程文件的创建与使用
添加一个资源,选中项目右击鼠标,选择Add New,选择C++,再选择第一项,点击下一步,填写class name (mSocketThread) ,base name选择QWidget,点击下一步,点击完成,等待生成文件。
mSocketThread.h文件和mSocketThread.cpp文件都要修改继承为QThread。 在主线程Widget.h文件中添加线程头文件 #include " mSocketThread.h",然后定义线程指针变量,SocketThread *mSocketThread;在主线程.cpp文件构造函数中实例化线程;
mSocketThread = new SocketThread(this);
使用start()函数启动线程,
mSocketThread->start();
重写子线程的run()函数,实现需要的操作;
记住线程中只有run()函数才是在新线程中执行。
当线程执行完成时可以通过发送信号emit isMsg(msg);告诉主线程子线程已经结束,主线程通过信号槽监听子线程发送的消息,就可以得到子线程情况,从而释放资源。
connect(mSocketThread,&SocketThread::isMsg,[=](QString msg){
qDebug()<<msg;
});
主线程传变量给子线程
正常线程的构造函数
explicit SocketThread(QWidget *parent = nullptr);
需要接收主线程变量的构造函数
explicit SocketThread(SOCKET mListen ;QString str,QWidget *parent = nullptr);
实例化线程
mSocketThread = new SocketThread(mListen,str);
mSocketThread->start();
在SocketThread.cpp的构造函数中接收变量
this->str= str;
this->mListen = mListen;
然后就可以在子线程的run()函数中使用变量。
----------------------------------------------------------END----------------------------------------------------------------
推荐阅读