QT 线程之 moveToThread()
来源:互联网 发布:java pfx证书读取私钥 编辑:程序博客网 时间:2024/06/05 08:19
直接进入主题:
基本用法,新建一个Widget类(父类无要求) ,在此基础上新建一个TestThread(必须继承自 QObject),
在Widget类构造函数里做如下处理:m_TestThread = new TestThread();m_thread = new QThread();m_TestThread ->moveToThread(m_thread);m_thread->start();//以上是必须滴connect(this,SIGNAL(startThread()),m_TestThread ,SLOT(threadStart()));emit startThread(); //发送信号,执行槽函数threadStart()int i= 0; while(1){ qDebug() <<"mainThread:"<<i++<<QThread::currentThreadId()<< endl; QThread::msleep(1000); }
TestThread类threadStart()槽函数代码
int i = 0; while(1){ qDebug() <<"m_thread:"<< i++<< QThread::currentThreadId()<< endl; QThread::msleep(1000); }
结论一:
可以发现,主线程并没有因为threadStart()的死循环而被阻塞,两段代码是运行在不同的线程中。
结论二:
如果将上述emit startThread(); 改为 m_MainThread->threadStart();
即直接调用函数的方式,而非槽函数。结果如下:
可以看出:通过调用函数的方式时,主线程被阻塞,也就是说,调用的函数没有运行在另一个线程中,而是在主线程。
说明:
1. 线程函数的 while循环结束 并不代表 线程结束
2.m_thread->isRunning() 可以判断 线程是否在运行
3.m_thread->isFinished() 可以判断 线程 是否结束
4.started() 线程被start时触发的信号
5.finished() 线程被stop时触发的信号
6.线程退出的方法
m_thread->quit();
m_thread->exit();
两者异同暂不讨论
7.等待线程结束,即阻塞
m_thread->wait()
- QT 线程之 moveToThread()
- Qt线程之moveToThread
- Qt 线程 ---movetothread
- Qt 多线程之MoveToThread()
- 线程使用方法之moveToThread
- 理解QT线程中的moveToThread
- 在Qt使用moveToThread() qt的线程
- Qt moveToThread
- Qt moveToThread
- Qt moveToThread
- qt thread with movetothread
- 在Qt使用moveToThread()
- Qt moveToThread使用说明
- 【Qt】QThread::moveToThread
- qt中movetothread的使用
- moveToThread()
- Qt之线程(QThread)
- Qt之线程(QThread)
- guava 集合
- 测试流程。。。
- IDEA下从零开始搭建SpringBoot工程
- KD-tree 原理详解
- 阿里巴巴Java开发手册终极版网页版v1.3.0
- QT 线程之 moveToThread()
- druid原理
- IntelliJ IDEA入门使用(二) 常用的基本设置
- FIFO队列使用时出队列遇到的问题
- 2.使用js实现数组求和
- Caffe上用SSD训练和测试pascal voc数据集
- 钩子函数的使用
- TCP,TCP/IP协议簇和UDP的区别与理解
- 文件再次提交至git