欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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----------------------------------------------------------------