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

怎样做网站手机客户端凡客家居

怎样做网站手机客户端,凡客家居,涿州房产网,做地理题的网站在 Qt 中#xff0c; 我们经常会用到多线程#xff0c;这时候就需要纠结是使用 Qt 的 QThread 还是使用 C 标准库的 std::thread。 这里记录一下我自己的理解#xff0c;先介绍一下 QThread 和 std::thread 的使用方法#xff0c;对比一下他们的不同#xff0c;最后说一下…        在 Qt 中 我们经常会用到多线程这时候就需要纠结是使用 Qt 的 QThread 还是使用 C 标准库的 std::thread。 这里记录一下我自己的理解先介绍一下 QThread 和 std::thread 的使用方法对比一下他们的不同最后说一下我理解的应该怎么选择这两种方法。 QThread使用方法 QThread 的使用有两种方法一种是继承 QThread然后重写 run() 函数这种方法适合执行单个任务比如计算某个耗时操作执行完即可不需要线程常驻。在 Qt5 之后 Qt 官方已经不推荐这种使用方法了所以在这里也不赘述了。 在 Qt5 之后推荐的方法是创建一个工作类继承于 QObject将工作对象通过 movetothread() 函数移动到一个新的线程中这种方法更符合 Qt 的对象模型并且更易于管理线程的生命周期和资源。下面是一个示例 class Worker : public QObject {Q_OBJECT public:Worker();~Worker();void doWorkA() {qDebug() Worker thread ID: QThread::currentThreadId();emit sigReadData(doWorkA);}void doWorkB() {qDebug() Worker thread ID: QThread::currentThreadId();emit sigResultReady();}signals:void sigReadData(QString data);void sigResultReady(); }; QThread *thread new QThread(); Worker *worker new Worker();worker-moveToThread(thread);// 连接信号槽 QObject::connect(worker, Worker::sigReadData, this, ::); QObject::connect(worker, Worker::sigResultReady, thread, QThread::quit); QObject::connect(worker, Worker::sigResultReady, worker, QObject::deleteLater); QObject::connect(thread, QThread::finished, thread, QObject::deleteLater); // 线程完成后自动删除qDebug() Main thread ID: QThread::currentThreadId();thread-start(); worker-doWorkA(); worker-doWorkB(); 这个 Worker 类没有做任何特别的事情但它包含所有必需的元素。在这个例子中 doWorkA() 被调用时可以做一些你自己的处理处理完后发送 sigReadData() 给主线程doWorkB() 完成后它会发出信号 sigResultReady()然后该信号将连接到 QThread 的槽 quit()触发 QThread 的事件循环退出。事件循环退出后QThread::finished() 信号被触发连接到槽 QObject::deleteLater()自动删除 QThread 对象。 顺便说一句这里要注意的非常重要的一件事是你永远不应该在 QObject 类的构造函数中分配堆对象使用 new。如果在构造函数中new会报错 QObject:Cannot create children for a parent that is in a different thread。这个报错是由于这个 new 分配是在主线程而不是新的子线程 QThread 实例上的。这意味着新创建的对象是由主线程拥有的而不是 QThread 实例。所以应该在 Worker 类的函数或者槽函数中分配此类资源例如在 doWorkA() 或者doWorkB() 中使用new。在这种情况下当调用该对象时该对象将位于新线程实例上因此新的线程实例将拥有该资源。 std::thread使用方法 std::thread 是 C11 引入的标准线程库用于创建和管理线程。它提供了一种轻量级的方法来实现多线程编程适合需要高性能和低延迟的应用。以下是 std::thread 的基本使用方法可以使用下面几种方法创建线程 #include iostream #include threadclass MyClass { public:void memberFunction() {std::cout Hello from member function! std::endl;} };void threadFunction() {std::cout Thread ID: std::this_thread::get_id() std::endl; }int main() {// 使用函数指针std::thread t1(threadFunction);std::cout Main thread ID: std::this_thread::get_id() std::endl;if (t1.joinable()) {t1.join(); // 等待线程完成}// 使用成员函数MyClass obj;std::thread t2(MyClass::memberFunction, obj); // 传递对象指针if (t2.joinable()) {t2.join(); // 等待线程完成}// 使用lambda表达式std::thread t3([](){std::cout Hello from thread! std::endl;});if (t3.joinable()) {t3.join(); // 等待线程完成}return 0; } 管理线程有两个函数一个是上面已经使用过的 join()另一个是 detach() std::thread t(threadFunction); t.join(); // 阻塞主线程直到 t 线程完成 std::thread t(threadFunction); t.detach(); // 将线程与当前线程分离允许 t 独立运行 // 注意必须确保分离的线程在程序退出前完成 QThread和std::thread的选择 在我看来QThread 不仅仅是一个简单的线程类它更像一个线程管理器。提供了与 Qt 框架的无缝集成特别是与信号槽机制的结合使用使得多线程编程更加方便和高效。我们可以把部分功能封装在一个工作对象中然后把这个对象 movetothread这样通过这个对象调用封装的所有方法都是在子线程中进行我只需要通过Qt的信号槽把子线程中我需要的数据传出来接收就可以在主线程或者UI上显示而不会卡住主线程或者UI。 例如我要控制一个打印机或者串口需要连接设备、发送消息和一直接收消息等功能我们把这几个功能封装在一个打印机类或者串口类中。创建对象然后通过 movetothread() 把这个类放到子线程这样我们就可以把连接、发送接收处理消息这些功能都放到子线程中而不影响主线程接收到的消息需要传给主线程并显示的话就发送信号给主线程。 而对于一些简单的多线程任务例如并行计算、独立的后台任务等使用 std::thread 可以更加轻便、直接和高效。std::thread 相对轻量没有额外的框架依赖适用于需要高性能和低开销的多线程操作。并且std::thread 是 C 标准的一部分保证了跨平台的一致性。如果需要在不同的平台上开发和运行代码std::thread 提供了一种标准化的方法。 总结一下 选择 QThread如果你需要与 Qt 对象和事件循环进行集成。选择 std::thread如果你需要一个更通用、更轻量级的多线程解决方案。
http://www.lakalapos1.cn/news/46192/

相关文章:

  • net建站系统凡客诚品倒闭了
  • 土特产直营网站建设代码银川网站建设公司哪家不错
  • 品牌型网站建设哪里好网页设计与制作考试
  • 建设电商网站的个人心得营销软件团购
  • 网站建设header老版建设银行网站
  • 事业单位网站设计网店代运营就是个坑
  • 设计一个个人网站的基本步骤上海移动云网站建设
  • 国外的网页制作网站好的网站建设公司有哪些
  • 电商网站功能列表无锡网站排名优化报价
  • 公司网站建设关键字描述长春关键词优化报价
  • php网站开发的相关技术厚街h5网站建设
  • 做网站推广有啥活动网站建设计入哪个明细科目
  • 开发什么网站好10个著名摄影网站
  • 进口彩妆做的好的网站工作服定制无锡帛裳 服饰实力
  • 网站系统建设招标公告wordpress博客软件
  • 广州市建设企业网站价格wordpress 转node
  • 做非法网站怎么判刑xiaohua wordpress主题
  • 强 的软件免费的软件下载西安的网络优化公司
  • 虚拟主机如何建设多个网站用户体验设计经典案例
  • 深圳自适应网站建设报价建网站 网站内容怎么做
  • 成都网站建设常见问题德清县新巿镇城市建设网站
  • 高新区网站建设 意义广西云尚网络科技有限公司
  • 网站后台的制作网站业务需求文档
  • 周到的做pc端网站西昌城乡建设网站
  • wordpress网站登录被篡改网站建设 项目经验
  • 学做网站的学校设计自己的名字图画
  • 如何运用链接推广网站青岛网页制作网站
  • 国家拨款农村建设查询的网站路由器通过域名解析做网站
  • 用linux系统怎么自己建设网站应用开发框架
  • 商城做网站哪家好服装设计学校十大排名