界面、线程与Qt线程
来源:互联网 发布:ubuntu怎么下载gcc 编辑:程序博客网 时间:2024/05/16 12:41
1, 当界面的操作频率很高,而且还要考虑用户体验时,耗时的操作会独占系统cpu资源 ,让界面卡死在那里,这时需要考虑多线程方案,将耗时的操作放在
线程中执行
如下例,界面需要不停地添加字符串,如果不使用线程处理的话界面会卡死,下面我们先使用UC中的线程方法实现
void * processData(void *par){ /*使用线程访问界面*/ QTextBrowser *res=(QTextBrowser*)par; sleep(2); res->append("send data to server"); sleep(5); res->append("client stop"); return par; } void DmsClient::startAndStop(){ /*把耗时操作 放入线程中 考虑线程如何访问 界面*/ res->append("client start"); pthread_t thid; pthread_create(&thid,0,processData,res); }uc中的线程也可以实现其功能 但是与界面的耦合度比较高 要和界面通信必须传一个界面的对象到线程处理函数中去 看qt中的线程
qt中的线程是面向对象的 qthread类
界面中的代码示例如下
构造函数中
myth=new MyThread(); /*关联线程的信号和界面的槽*/ connect(myth,SIGNAL(mysig(QString)),this,SLOT(getData(QString))); void Client::startAndStop(){ /*把耗时操作 放入线程中 考虑线程如何访问 界面*/ res->append("client start"); /*如何启动线程*/ myth->start(); start->setDisabled(true); } void Client::getData(QString data){ /*槽函数将数据接收到之后 显示到界面上*/ res->append(data); }
线程类中 实现重写虚函数run函数
头文件:
class MyThread:public QThread{ Q_OBJECT /*在run函数实现线程代码 完成数据的发送 让界面得知发送的数据 需要定义信号函数 */ public: void run(); public:signals: void mysig(QString par); };
void MyThread::run(){ emit mysig("thread start"); /*循环发送数据*/ ...........................
把数据通过信号发送出去 emit mysig(QString(datastr)); } emit mysig("thread end!");}
- 界面、线程与Qt线程
- QT线程调用界面函数
- qt 线程更新UI界面
- 界面与线程 问题
- 界面与线程
- qt 线程与ui线程同步
- qt 线程与ui线程同步
- QT]线程中如何修改界面
- QT学习笔记(2):界面线程
- qt 与ros 实现UI界面下主线程与子线程双向通信
- qt与linux的线程
- Qt线程、事件与QObject
- Qt线程、事件与QObject
- Qt线程与事件循环
- Qt线程、事件与QObject
- QT:线程、事件与QObject
- QT的进程与线程
- Qt 线程与事件循环
- OraclePL/SQL编程规范指南
- gb2312区位码 gbk Unicode
- Leetcode: Set Matrix Zeroes
- 划分树 poj 2104
- android 开发中遇到的ERROR经常长期更新笔记
- 界面、线程与Qt线程
- 如何阅读别人的源代
- Adopt-a-JSR计划简介
- 如何在 Watir 中识别各种 HTML 对象
- 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)
- 使用Ruby & Watir读取页面text列表 , Ruby写文件
- Introduction to SEO Search Engine Optimisation practices
- 1月21号
- 法语直接引语变间接引语