界面、线程与Qt线程

http://blog.csdn.net/xmaoh234/article/details/8523337

[cpp]  view plain copy
 
  1.   
1, 当界面的操作频率很高,而且还要考虑用户体验时,耗时的操作会独占系统cpu资源 ,让界面卡死在那里,这时需要考虑多线程方案,将耗时的操作放在

 

线程中执行

如下例,界面需要不停地添加字符串,如果不使用线程处理的话界面会卡死,下面我们先使用UC中的线程方法实现

 

[cpp]  view plain copy
 
  1. void *  processData(void *par){  
  2.     /*使用线程访问界面*/  
  3.     QTextBrowser *res=(QTextBrowser*)par;  
  4.     sleep(2);  
  5.     res->append("send data to server");  
  6.     sleep(5);  
  7.     res->append("client  stop");   
  8.     return par;  
  9. }  
  10. void   DmsClient::startAndStop(){  
  11.     /*把耗时操作 放入线程中 考虑线程如何访问 
  12. */  
  13.     res->append("client start");  
  14.     pthread_t   thid;  
  15.     pthread_create(&thid,0,processData,res);  
  16.   
  17.   
  18. }  
uc中的线程也可以实现其功能 但是与界面的耦合度比较高  要和界面通信必须传一个界面的对象到线程处理函数中去    看qt中的线程

 

qt中的线程是面向对象的 qthread类  

界面中的代码示例如下

 

[cpp]  view plain copy
 
  1.    
[cpp]  view plain copy
 
  1. 构造函数中  
[cpp]  view plain copy
 
  1. myth=new MyThread();  
  2.             /*关联线程的信号和界面的槽*/  
  3.             connect(myth,SIGNAL(mysig(QString)),this,SLOT(getData(QString)));   
  4.   
  5.  void  Client::startAndStop(){  
  6.             /*把耗时操作 放入线程中 考虑线程如何访问 
  7.       界面*/  
  8.             res->append("client start");  
  9.        
  10.             /*如何启动线程*/  
  11.             myth->start();      
  12.             start->setDisabled(true);  
  13.         }  
  14.   
  15.        void  Client::getData(QString data){  
  16.            /*槽函数将数据接收到之后 显示到界面上*/   
  17.            res->append(data);  
  18.        }  
  19.    
 

 

线程类中 实现重写虚函数run函数

头文件:

 

[cpp]  view plain copy
 
  1. class MyThread:public QThread{  
  2.     Q_OBJECT  
  3.     /*在run函数实现线程代码 完成数据的发送 
  4.     让界面得知发送的数据 需要定义信号函数 */  
  5.     public:  
  6.     void run();   
  7.     public:signals:  
  8.     void  mysig(QString par);   
  9. };  
 

 

 

[cpp]  view plain copy
 
  1. void MyThread::run(){  
  2.     emit mysig("thread start");   
  3.     /*循环发送数据*/  
  4.   ...........................  
[cpp]  view plain copy
 
  1. 把数据通过信号发送出去  
  2.            emit mysig(QString(datastr));   
  3.          
  4.     }   
  5.     emit mysig("thread end!");  
  6. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值