2019年08月18日起笔

方式一:继承QThread重写run函数

MyThread.h
-----------------------------------
...
class MyThread : public QThread
{
protected:
  void run();
} MyThread.cpp
-----------------------------------
...
void MyThread::run()
{
//do something
...
exec();
} Main.cpp
------------------------------------
...
MyThread * myThread = new MyThread;
MyThread.start();
...

方式二:继承QObject并moveToThread

MyWork.h
--------------------------------------
class MyWork : public QObject
{
Q_OBJECT
public:
explict MyWork(QObject * parent = nullptr);
public slots:
void slotsDoWork();
}; MyWork.cpp
--------------------------------------
MyWork::MyWork(QObject *parent):QObject(parent)
{} void MyWork::slotsDoWork()
{
//do something
} someWhere.cpp
--------------------------------------
...
QThread * thread = new QThread(this);
MyWork * myWork = new MyWork;

QObject::connect(thread, &QThread::started, myWork, &MyWork::slotsDoWork);
MyWork->moveToThread(thread); thread->start();
/*
*深入:thread 和 myWork分别在哪个线程中运行? :https://www.cnblogs.com/azbane/p/11465466.html
*/

消息和槽在线程和依附线程间的传递:

首先说明:依附线程是指创建线程的线程。

情况一:线程发射消息,依附线程接收消息

    一.1继承QThread重写run函数,小熊尝试失败,针对代码及编译错误消息如下:

MyThread.h
---------------------------------
signals:
void signalsA(); MyThread.cpp
---------------------------------
void MyThread::run()
{
...
emit signalsA();
...
} 编译错误:
---------------------------------
LNK2019:无法解析的外部符号"public: void __thiscall MyThread::signalsA(void)"(?signals@MyThread@@QAEXXZ),该符号在函数 " protected: virtual void __thiscall MyThread::run(void) " (?run@MyThread@@MAEXXZ)中被引用

在run函数中发射消息编译会报错....就不用写关联此信号的槽..了

    一.2继承QObject并moveToThread

MyWork.h
------------------------------------
signals:
void signalsA(); MyWork.cpp
------------------------------------
void MyWork::slotsDoWork()
{
...
emit signalsA();
...
} someWhere.cpp
-----------------------------------
QObject::connect(myWork, &MyWork::signalsA, this, &someWhere::slotsToDoSomething);

很顺畅,小熊目前没有发现什么问题。

情况二:依附线程发送消息,线程接收消息

暂未使用到,待补充

最新文章

  1. 三代PacBio reads纠错 - 专题
  2. WCF开发框架之插件化应用模式升级
  3. IOS测试程序运行耗时
  4. MySQL 及 SQL 注入
  5. objective-C运算符和表达式
  6. 最冤枉的关键字----sizeof
  7. Sql狗血的Bit类型赋值与取值
  8. IOCP模型与网络编程
  9. 一个有用的shell脚本
  10. windows python flask上传文件出现IOError: [Errno 13] Permission denied: 'E:\\git\\test\\static\\uploads'的解决方法
  11. java.lang.NoClassDefFoundError: org/apache/jsp/jsp/Container_jsp
  12. Linux 常用命令,处理端口和Tomcat,mysql
  13. swig模板引擎汇总
  14. json数据格式 net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of Error:(findColumns1)Read timed out
  15. [Java]Servlet&JSP
  16. SharePoint 列表视图修改多行文本字段显示长度
  17. mysql中的日期转换函数(类似oracle中的to_date)
  18. SPOJ ADAFIELD Ada and Field(STL的使用:set,multiset,map的迭代器)题解
  19. js的let语句在安卓手机端的QQ浏览器出错的问题
  20. DataStage 错误集(持续更新)

热门文章

  1. Web应急:门罗币恶意挖矿
  2. W tensorflow/core/util/ctc/ctc_loss_calculator.cc:144] No valid path found 或 loss:inf的解决方案
  3. 『快乐链覆盖 树形dp』
  4. Java学习:Properties类
  5. react的标记渲染机制
  6. Java向MySQL新增记录时间误差问题
  7. 练手WPF(一)——模拟时钟与数字时钟的制作(上)
  8. asp.net core流式上传大文件
  9. ORA-03113: 通信通道的文件结束解决方法一例
  10. 《EOPL》 : 实现了 call/cc