预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第6章Qt应用程序开发6.4Qt4多线程应用#include<QThread> 在一个程序中,线程表示单独的调度和执行单位。 在一个程序中,各线程共享该程序的资源。 线程和进程的含义不同。在一个Qt程序中进程的入口点是main(),而Qthread类则是从run()开始执行,为了能让线程运行必须使用run()方法。 默认情况下,run()开始执行,通过调用exec()方法进入事件循环。 如果创建自己的线程类,需要重载run()方法。 classMyThread:publicQThread { public: voidrun(); }; voidMyThread::run() { QTcpSocketsocket; //connectQTcpSocket'ssignalssomewheremeaningful ... socket.connectToHost(hostName,portNumber); exec(); } 上例将建立一个QTcpSocket线程,然后执行线程事件的循环,使用start()方法开始执行,并在执行结束时使用run()方法来返回。当执行完函数返回main()函数的时候,QThread将发送信号started()、finished()、terminated()来告诉线程的状态;或者可使用isRunning()和isFinished()返回线程的状态,使用wait()方法来等待一个线程完成执行。 一个线程得到系统中程序设置默认大小的堆,程序员也可以使用setStackSize()函数来设置堆的大小。 每一个线程都有自己的事件循环,当使用exec()函数的时候就开始了事件循环的过程,同时使用quit()或者exit()来结束,用事件循环的机制是为了让线程与线程之间进行通信。 需要结束一个运行的线程时,可以使用terminate()来完成。 currentThreadId()返回线程的ID,currentThread()返回一个QThread指针。 QThread也提供了依赖平台的休眠函数,sleep()以秒为单位,msleep()以毫秒为单位,usleep()以微秒为单位。 利用QThread实现计数器功能。 点击“启动”按钮,开始计数, 点击“停止”按钮,停止计数。 classthreadtest:publicQThread { Q_OBJECT public: threadtest(); voidrun(); signals: voidchangecount(); privateslots: voidbegincount(); voidstopcount(); private: boolflag;//线程启动的标志flag=true(未启动) };voidthreadtest::run() { while(!flag) { emitchangecount(); qDebug("running."); usleep(500000); } } 多线程的应用-例子(widget.h)多线程的应用-例子(widget.cpp)多线程的应用-例子(widget.cpp)练习谢谢!