当前位置: 首页 > news >正文

怎么做信息发布型网站做淘宝主要看哪些网站

怎么做信息发布型网站,做淘宝主要看哪些网站,打开网站说建设中是什么问题?,有什么网站做热图1. QThread的两种用法 第一种用法就是继承QThread#xff0c;然后覆写 virtual void run()#xff0c; 这种用法的缺点是不能利用信号槽机制。 第二种用法就是创建一个线程#xff0c;创建一个对象#xff0c;再将对象moveToThread, 这种可以充分利用信号槽机制#xff…1. QThread的两种用法 第一种用法就是继承QThread然后覆写 virtual void run() 这种用法的缺点是不能利用信号槽机制。 第二种用法就是创建一个线程创建一个对象再将对象moveToThread, 这种可以充分利用信号槽机制与UI框架完美融合。这与std::thread也是不一样的地方。 2. moveToThread用法讲解 示例地址MultiThread/QThreadDemo · 沁明/QtDemo - 码云 - 开源中国 (gitee.com) 直接调用 QObject::moveToThread() 函数将继承自 QObject 的对象移到线程里面。此时该对象的 槽函数运行在另一个线程里面。 也就是说当有信号绑定到该对象的槽函数的时候并发送信号该槽函数就运行在另一个线程里否则该函数仍然运行在对象所在的线程中。 1先创建一个QObject的子类。 它要运行的函数都可以在子线程中运行。 worker.h #ifndef WORKER_H #define WORKER_H#include QObjectclass Worker : public QObject {Q_OBJECT public:explicit Worker(QObject *parent nullptr);public slots:void workSlot();void msg1Slot(const QString m1);void msg3Slot(const QString m3);signals:void msg1(const QString m1);void msg2(const QString m2); };#endif // WORKER_Hworker.cpp #include worker.h#include QDebug #include QThreadWorker::Worker(QObject *parent) : QObject{parent} {connect(this, Worker::msg1, this, Worker::msg1Slot); }void Worker::workSlot() {qDebug() QThread begin;qDebug() child thread id QThread::currentThreadId();qDebug() QThread end;// 线槽函数已经执行完进入线程exec()中可以通过发射信号重新让槽函数在线程中执行。也可以通过// quit() 退出线程exec()。 }void Worker::msg1Slot(const QString m1) {qDebug() QThread::currentThreadId() receive msg1 m1; }void Worker::msg3Slot(const QString m3) {qDebug() QThread::currentThreadId() receive msg3 m3; }2创建worker对象 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow), thread(nullptr) {ui-setupUi(this);worker new Worker;qDebug() 主线程 QThread::currentThreadId();connect(worker, Worker::msg2, this, MainWindow::msg2Slot);connect(this, MainWindow::msg3, worker, Worker::msg3Slot); } 直接在窗口构造函数中创建worker对象程序运行期间这个对象不会被析构。 由于要使用moveToThread函数所以worker不能设置父对象的必须为空。 绑定了两个槽函数分别用来响应消息2和消息3 但是消息2的槽在窗口对象上消息3的槽函数在worker对象上。 3如果不创建子线程看看3条消息的执行线程在哪 如果没有启用子线程的时候3条消息执行函数都在主线程上。 4启用子线程之后3条消息的执行线程是什么 void MainWindow::on_pushButtonStart_clicked() {qDebug() on_pushButtonStart_clicked线程 QThread::currentThreadId();if (thread)return;thread new QThread;worker-moveToThread(thread);QObject::connect(thread, QThread::started, worker, Worker::workSlot);QObject::connect(thread, QThread::finished, this,MainWindow::workerDetach);thread-start(); } 这里创建了子线程然后将worker对象移动线程内执行。  workSlot执行完毕之后其实线程并没有结束它会执行exec()进入线程的消息循环。 void Worker::workSlot() {qDebug() QThread begin;qDebug() child thread id QThread::currentThreadId();qDebug() QThread end;// 线槽函数已经执行完进入线程exec()中可以通过发射信号重新让槽函数在线程中执行。也可以通过// quit() 退出线程exec()。 } 后面在worker上的信号或者槽绑定的触发都会进行响应。 使用QThread启动子线程之后消息1和消息3 的槽函数在子线程上执行了。 但是消息2的槽函数仍在主线程上。 重新复习一下信号槽绑定 Worker::Worker(QObject *parent) : QObject{parent} {connect(this, Worker::msg1, this, Worker::msg1Slot); } connect(worker, Worker::msg2, this, MainWindow::msg2Slot);connect(this, MainWindow::msg3, worker, Worker::msg3Slot); 可以看出槽函数的执行线程就是对象所在的线程。 在创建了子线程之后worker的执行线程已经发生了变化所以消息1、3执行线程也变成了子线程。 5)停止子线程之后恢复原来线程 QObject::connect(thread, QThread::finished, this,MainWindow::workerDetach);void MainWindow::workerDetach() {qDebug() workerDetach线程 QThread::currentThreadId();worker-moveToThread(QThread::currentThread()); } 设置在线程退出之后重新移动对象到主线程。
http://www.hkea.cn/news/14264711/

相关文章:

  • 百度工具网站改版网站互联网推广
  • 广东建设厅网站个人怎么登录啊怎么开网店淘宝
  • 西安商城类网站制作网站建设百度
  • 河池公司网站开发价格网站建设吉金手指专业11
  • 订做网站全国免费自学网站有哪些
  • 昆明建设网站制作wordpress上传中文文件
  • 口碑好网站建设公司天元建设集团有限公司总工程师
  • 电子商务网站建设的技术综述编写网站用什么语言
  • 网站的建设和维护腾讯企点有风险吗
  • 二 网站建设的目的及功能定位建筑装饰和网站建设哪个好
  • 邮件模板网站商务信息网站
  • 珠宝网站开发的背景flash网页制作教程
  • 营销型企业网站报价网站一个月
  • 域名和网站网站跳转怎么解释
  • 蓟县做网站惠州市惠城区规划建设局网站
  • 网站设计模板简约wordpress增加分享
  • 可视化响应式网站建设云南做公司网站多少钱
  • 电商平台网站开发过程是什么企业网站有哪四种类型
  • 网站肯定被k专业彩票网站开发
  • 微网站制作电话常州建设局网站为什么打不开
  • 网站名字重复广州工商注册公司注册
  • 摄影网站投稿软件开发定制费用
  • 西安网站设计公司丹阳网站建设价格
  • 西宁微网站建设多少钱上海外贸新三样出口超2400亿元
  • 哪个网络公司做网站好点适合设计师的网站编辑软件
  • 网站推广公司 优帮云灰色关键词排名代做
  • 紫搜做网站简单大气网站欣赏
  • 9i网站建设建设项目环保验收公示网站
  • c 在线视频网站开发临时域名用于网站调试
  • 文字短链接生成器百度搜索引擎优化方式