http://blog.csdn.net/xmaoh234/article/details/8523337
线程中执行
如下例,界面需要不停地添加字符串,如果不使用线程处理的话界面会卡死,下面我们先使用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);
- }
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!");
- }

9182

被折叠的 条评论
为什么被折叠?



