zoukankan      html  css  js  c++  java
  • qt中的多线程(转)

    在Qt进行多线程的编程,主要是使用提供的与平台无关的QThread类。
          QThread类使用,在开发文档上的例子很少。文档提供的使用途径是重写run()函数,如下

               
           在run()中实现的代码会在此线程中运行,可是在你继承类中你写的slots在那个线程中执行呢?这个一直很困扰我。后来做了许多实验终于发现,你继承QThread类的子类的slots在此线程依附的那个进程执行,这样就违背了我们当初的意向,这样的多线程也就没什么意义了。继承QThread类来实现多线程,只能在run()函数中动手脚,这实在太难受,被束缚了手脚。

         在困扰中无意发现了一个Qt开发人员有关QThread的使用的帖子。在文章中他一直强调QThread的只是用来管理线程的,他本身就不应该包含他所要执行的代码。他提供的一种使用方法是在继承QOBjec类的子类中完成你所希望的在此线程中所要实现的功能。
    然后创建一个QThread的对象,再将QObject的子类的对象move到QThread的对象中。由于signal-slots机制支持跨线程,所以线程间通过信号和槽来进行通讯很方便,而且省去了线程间的同步互斥。
         这两种为目前使用QThread类的两种方法,据我个人的观点我不会偏重于那一方,我只结合实践来选择谁。当你另开的线程只是一直在做同一个动作,第一种就很不错,比如一个服务端,在此段不停的从摄像头中抓取图像给它,然后写入socket中。实现的大体是在run()中使用while(true),设置一个控制的bool类型的量。改变这个控制量时应该使用互斥,因为不同的线程在使用这个值。
         第二种方法比较具灵活性。在新线程中运行的动作取决于主线程时,通过信号和槽能很好的实现传值和响应。

  • 相关阅读:
    实验六 继承定义与使用
    第四周java实验
    解决 GitHub 提交次数过多 .git 文件过大的问题
    添加开机启动项目
    bash启用 z(同理git bash)
    WIndows to go安装win10系统到移动硬盘
    Make for Windows
    zotero引用3GPP标准暂不完善——使用BibTeX
    Spyder中内嵌的IPython Console自动续行而不运行的问题
    texstudio.org打不开——下载最新版TeXstudio
  • 原文地址:https://www.cnblogs.com/alleyonline/p/4903332.html
Copyright © 2011-2022 走看看