先贴几篇有意思的讨论

https://www.qt.io/blog/2010/06/17/youre-doing-it-wrong#commento-login-box-container

https://www.qt.io/blog/2006/12/04/threading-without-the-headache

https://woboq.com/blog/qthread-you-were-not-doing-so-wrong.html

http://blog.debao.me/2013/08/how-to-use-qthread-in-the-right-way-part-1/

https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/

https://blog.csdn.net/czyt1988/article/details/71194457

有篇国内:https://blog.csdn.net/lynfam/article/details/7081757

https://blog.csdn.net/bladeandmaster88/article/details/51802491

http://blog.sina.com.cn/s/blog_a6fb6cc90102vs8z.html

https://blog.csdn.net/dbzhang800/article/details/6882981

https://blog.csdn.net/dbzhang800/article/details/6889291

https://blog.csdn.net/czyt1988/article/details/64441443

https://stackoverflow.com/questions/16879971/example-of-the-right-way-to-use-qthread-in-pyqt

https://stackoverflow.com/questions/6783194/background-thread-with-qthread-in-pyqt

PYTHON:

https://stackoverflow.com/questions/20324804/how-to-use-qthread-correctly-in-pyqt-with-movetothread

So, the conclusion is:
1. Don't read Qt 4.6 docs, it is wrong as it says "To create your own threads, subclass QThread and reimplement run()." http://doc.qt.nokia.com/4.6...

  1. Don't read the given "best resource", it is also wrong, because it also subclasses QThread: "...just a small amount of work: subclass QThread and reimplement run().." http://labs.trolltech.com/b...

The correct answer is in the shortest blog given in the comments: http://labs.trolltech.com/b...
Here's a shortened snippet from it for those who don't want to dig into the tarball:

class Producer : public QObject
{
Q_OBJECT
public slots:
void produce() { ...emit produced(&data)...emit finished().. }
signals:
void produced(QByteArray *data);
void finished();
};

class Consumer : public QObject
{
Q_OBJECT
public slots:
void consume(QByteArray *data) { ...emit consumed()...emit finished().. }
signals:
void consumed();
void finished();
};

int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
// create the producer and consumer and plug them together
Producer producer;
Consumer consumer;
producer.connect(&consumer, SIGNAL(consumed()), SLOT(produce()));
consumer.connect(&producer, SIGNAL(produced(QByteArray *)), SLOT(consume(QByteArray *)));

// they both get their own thread
QThread producerThread;
producer.moveToThread(&producerThread);
QThread consumerThread;
consumer.moveToThread(&consumerThread); // start producing once the producer's thread has started
producer.connect(&producerThread, SIGNAL(started()), SLOT(produce())); // when the consumer is done, it stops its thread
consumerThread.connect(&consumer, SIGNAL(finished()), SLOT(quit()));
// when consumerThread is done, it stops the producerThread
producerThread.connect(&consumerThread, SIGNAL(finished()), SLOT(quit()));
// when producerThread is done, it quits the application
app.connect(&producerThread, SIGNAL(finished()), SLOT(quit())); // go!
producerThread.start();
consumerThread.start();
return app.exec();

}

https://nikolak.com/pyqt-threading-tutorial/

https://blog.csdn.net/weixin_34348805/article/details/90525817

https://yq.aliyun.com/articles/119876?scm=20140722.184.2.173

PyQt中QThread多线程的正确用法【待完善】的更多相关文章

  1. 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解

    Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解   多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...

  2. Spring MVC中Session的正确用法<转>

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  3. C#中dynamic的正确用法

    C#中dynamic的正确用法  http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4 ...

  4. 【转】Spring MVC中Session的正确用法之我见

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  5. C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod("Add");

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  6. 【转】改善C#程序的建议2:C#中dynamic的正确用法 空间

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  7. C#中dynamic、ExpandoObject 的正确用法

    原文地址:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynam ...

  8. C#中dynamic的正确用法【转】

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  9. Spring MVC中Session的正确用法之我见

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

随机推荐

  1. 永远不要使用双花括号初始化实例,否则就会OOM!

    生活中的尴尬无处不在,有时候你只是想简单的装一把,但某些"老同志"总是在不经意之间,给你无情的一脚,踹得你简直无法呼吸. 但谁让咱年轻呢?吃亏要趁早,前路会更好. 喝了这口温热的鸡 ...

  2. Gym101635C Macarons

    题目链接:http://codeforces.com/gym/101635/attachments 题目大意: 给出一个 \(N \times M\) 的网格图,请你用 \(1 \times 1\) ...

  3. POJ3225

    题目链接:https://vjudge.net/problem/POJ-3225 解题思路:这道题要是不看题解以本渣新现在的实力确实是做不出来. 以区间为基础建立线段树. 当X=‘U', 将区间T内的 ...

  4. 一、工具类DBUtil——数据库连接

    这个工具类完成的工作如下: 1.第一个static方法,完成数据库初始化的工作 2.第二个static方法,完成与数据库建立连接的工作. package util; import java.sql.C ...

  5. Algorithms - Data Structure - Perfect Hashing - 完全散列

    相关概念 散列表 hashtable 是一种实现字典操作的有效数据结构. 在散列表中,不是直接把关键字作为数组的下标,而是根据关键字计算出相应的下标. 散列函数 hashfunction'h' 除法散 ...

  6. Java——线程安全的集合

    线程安全的集合    java.util.concurrent包:ConcurrentHashMap,ConcurrentSkipListMap,ConcurrentSkipListSet,Concu ...

  7. python3.7 64bit安装pygame1.9.3

    https://blog.csdn.net/xiaolixi199311/article/details/79209506/

  8. C# 基础之参数修饰符

    参数传参的时候一共有四种传递方式: 一.无修饰符传参 也就是说没有传参修饰符,这种情况传过去的是一个副本,本体是不会被改变的 二.out传参修饰符 在传参的参数全面加一个out: public voi ...

  9. PAT 1036 Boys vs Girls (25分) 比大小而已

    题目 This time you are asked to tell the difference between the lowest grade of all the male students ...

  10. Rocket - util - Broadcaster

    https://mp.weixin.qq.com/s/ohBVNAXZUA538qSxfBGMKA   简单介绍Broadcaster的实现.   ​​   1. Broadcaster   广播即是 ...