首页 QT线程start()和run()

QT线程start()和run()

举报
开通vip

QT线程start()和run()QT线程(一):线程类 线程之间共享数据,但又单独执行; QT线程Qthread是平台无关的; 通常主线程从main开始执行,而在主线程中创建其他线程,其他线程派生于QThread; 1、线程优先级 总共8个优先级:线程优先级从上到下越来越高。 constant Value Description QThread::IdlePriority 0 scheduled only when no other threads are running. QThread::LowestPriority 1...

QT线程start()和run()
QT线程(一):线程类 线程之间共享数据,但又单独执行; QT线程Qthread是平台无关的; 通常主线程从main开始执行,而在主线程中创建其他线程,其他线程派生于QThread; 1、线程优先级 总共8个优先级:线程优先级从上到下越来越高。 constant Value Description QThread::IdlePriority 0 scheduled only when no other threads are running. QThread::LowestPriority 1 scheduled less often than LowPriority. QThread::LowPriority 2 scheduled less often than NormalPriority. QThread::NormalPriority 3 the default priority of the operating system. QThread::HighPriority 4 scheduled more often than NormalPriority. QThread::HighestPriority 5 scheduled more often than HighPriority. QThread::TimeCriticalPriority 6 scheduled as often as possible. QThread::InheritPriority 7 use the same priority as the creating thread. This is the default.       2、线程管理 2.1、线程启动 void start( Prioritypriority= InheritPriority ) 启动线程执行,启动后会发出started信号。     2.2、线程执行 int exec() 进入线程eventloop。 virtual void run() 线程入口。     2.3、线程退出 void quit() 相当于exit(0)。 void exit( intreturnCode= 0 ) 调用exit后,thread将退出event loop,并从exec返回,exec的返回值就是returnCode。 通常returnCode=0表示成功,其他值表示失败。 void terminate() 结束线程,线程是否立即终止取决于操作系统。 线程被终止时,所有等待该线程Finished的线程都将被唤醒。 terminate是否调用取决于setTerminationEnabled( boolenabled= true )开关。     2.4、线程等待 void msleep( unsigned longmsecs) void sleep( unsigned longsecs) void usleep( unsigned longusecs) bool wait( unsigned longtime= ULONG_MAX ) 线程将会被阻塞,等待time毫秒。和sleep不同的是,如果线程退出,则wait会返回。     2.4、线程状态 bool isFinished() const 线程是否已退出。 bool isRunning() const 线程是否还处于运行态。     2.5、线程属性 Priority priority() const void setPriority( Prioritypriority) void setStackSize( uintstackSize) uint stackSize() const void setTerminationEnabled( boolenabled= true ) 设置是否响应terminate()。     3、线程实例 当我们创建线程时,首先是从Qthread派生类定义一个新的线程,然后再使用该线程时,创建该线程类的对象。 例如: class MyThread : public QThread { protected: void run();                    /* 重载run */ }; void MyThread::run() { QTcpSocket socket; socket.connectToHost(hostName, portNumber);    /* 建立tcp连接 */ exec();                     /* 进入事件循环 */ } int main() { MyThread thread;        /* 使用新创建的thread */ thread.start();                 /* thread会执行run(),建立tcp连接并进入事件循环,直到thread终止退出事件循环 */ thread.wait();          /* 等待thread退出 */ return 0; } 从QThread派生类时,需要重新实现QThread的虚函数run。 void QThread::run () [virtual protected] 该函数是线程的入口,当我们使用start()启动线程时,新线程就会执行run()。默认的run()函数就仅仅调用了exec()进入事件循环。 当然,定义自己的线程run()时,也可以不使用事件循环, 例如: class Thread : public QThread { Q_OBJECT public: Thread(); void setMessage(const QString &message); void stop(); protected: void run(); private: QString messageStr; volatile bool stopped; }; thread::Thread() { stopped = false; } void Thread::run() { while(!stopped)     /* 该thread就没有用到exec()进入事件循环 */ std::cerr << qPrintable(messageStr); stopped = false; std::cerr << std::endl; } void Thread::stop() { stopped = true; }
本文档为【QT线程start()和run()】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_266065
暂无简介~
格式:doc
大小:42KB
软件:Word
页数:7
分类:互联网
上传时间:2019-06-04
浏览量:9