Qt的QThread一点理解

QTread类是Qt编写多线程程序的一个最基础的类,它本身的使用是比较简单的。但是多线程编程最重要的是整个编程模型。在使用QTread类时对几个函数的作用需要理解。run(),exec(),start(),quit()或exit(0),wait()。

首先,我们要清楚,我们运行一个线程的时候一般都是处理计算密集型或者I/O密集型的操作,在这些操作中我们至少需要一个交互,就是计算或I/O操作结束时得到一个通知。好结束该线程。另外,我们可能需要对处理过程进行监听。典型的就是进度条了。

start()------->run()-------->exec()

exit(0)或quit()使线程从exec()中返回

wait(unsign longlong time)阻塞线程使线程执行完 (exec()后到run()结束块的操作即从run()函数返回)或等待time时间后结束。

 

在理解这几个函数,我们需要区分线程内和线程外(创建该线程的进程或线程)。

线程内执行的函数有run(),exec()

run()函数是线程启动执行的函数。exec()函数是线程进入事件循环的函数。

这里有些难以理解的是要把exec() ==loopevent,最初我就困惑在这里,以为exec()是启动run()函数,理解了这个命名,就会对Qt主函数的a.exec()就好理解了。

一般在run函数中,

1、先声明好对象A,….;

2、构建对象间的connect或对象与QThread子类自身的信号槽连接;

3、运行要执行的函数A.dosomething(),…….;

4、在使线程进入事件循环exec();这样在A.dosomething()执行到某个特定信号会发出的时候,便会执行connect对应的槽或信号函数。

5、exec()后到run()结束块的操作

线程外执行的函数start():

start()是启动一个线程,该线程直接执行run()函数。线程只有在中调用该线程的线程创建。也就是说QThread类的构造函数是在调用该线程的线程执行的。所以如果要在线程中new一个类的实例。得把new操作放到run()函数中。只需该线程拥有的数据都在run函数中实例化。

线程外执行的函数exit(),wait()

若在线程内接收到某个信号想结束整个线程,则在QTread子类的自定义槽中执行这些函数,严格来说QTread子类自定义的槽函数可以由connect函数的第5个参数来决定是在线程内执行或者在调用该线程的线程执行。

自己写了一个简单socket5协议的客户端,应用了QTCPSocket类,下载地址http://download.csdn.net/detail/wenwenxiong/8338007


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值