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

网站公司备案有用莱芜金点子最新招工

网站公司备案有用,莱芜金点子最新招工,wordpress 最近登录地址,德邦物流公司现代物流网站建设与开发简介#xff1a; 线程是操作系统中的基本执行单元#xff0c;是一个独立的执行路径。每个线程都有自己的栈空间#xff0c;用于存储本地变量和函数调用的上下文。多个线程可以在同一进程中并发执行#xff0c;从而实现并发处理#xff0c;提高程序的性能和响应能力。 与进…简介 线程是操作系统中的基本执行单元是一个独立的执行路径。每个线程都有自己的栈空间用于存储本地变量和函数调用的上下文。多个线程可以在同一进程中并发执行从而实现并发处理提高程序的性能和响应能力。 与进程不同的是线程是轻量级的它们共享同一进程的地址空间这意味着它们可以访问相同的内存和文件资源从而更容易地共享数据和通信 线程类型 1、QThread。 2、QObjectmoveToThread实现。 3、QThreadPoolQRunnable实现。 4、QFutureQtConcurrent实现。 5、std::thread实现不是QT自身的但是在Qt中使用比较方便也介绍下。 QThread 介绍优点是简单易用能轻松地创建和管理线程。它提供了一些方法来控制线程的生命周期包括start()和quit()方法来启动和停止线程以及wait()方法来等待线程完成。 QThread还提供了一些信号来管理线程。例如finished()信号在线程完成执行后发出error()信号在线程发生错误时发出。它的线程入口是从run函数开始。 但是它也存在缺点它只有run函数内部才是在线程范围内其它函数都是在主线程中。 适用场景生命周期长但是交互少的场景。 代码 .h #include QThread class MThread : public QThread {Q_OBJECT public:MThread();void run(); public slots:void test(int val); };.cpp #include mthread.h #include QDebugMThread::MThread() {qDebug()main threadQThread::currentThreadId(); }void MThread::test(int val) {qDebug()test valQThread::currentThreadId()val; }void MThread::run() {qDebug()thread 1QThread::currentThreadId(); } 调用 MThread *thread new MThread();connect(this,Widget::sigSendVal,thread,MThread::test);thread-start();this-sigSendVal(66);thread-wait();thread-exit();结果 QObjectmoveToThread实现 介绍优点是交互灵活且跟主线程之间的所有信号槽都是在线程中执行QThread拥有的线程控制它都具有如startquitwait等等。 缺点代码逻辑较复杂使用灵活性没有那么高由于创建的类较多内存占用较高性能相对较低。 适用场景生命周期长交互频繁且需要交互逻辑也在线程中的场景。 代码 .h #include QObject class MThreadObject : public QObject {Q_OBJECT public:MThreadObject(); public slots:void startThread();void slotTest(int val); };};.cpp #include mthreadobject.h #include QThread #include QDebugMThreadObject::MThreadObject() {qDebug()main threadQThread::currentThreadId(); }void MThreadObject::startThread() {qDebug()thread 2QThread::currentThreadId(); }void MThreadObject::slotTest(int val) {qDebug()test valQThread::currentThreadId()val; }调用 MThreadObject* object new MThreadObject();QThread* thread2 new QThread;object-moveToThread(thread2);connect(thread2,QThread::started,object,MThreadObject::startThread);connect(this,Widget::sigSendVal,object,MThreadObject::slotTest);thread2-start();emit sigSendVal(66); //this-sigSendVal(66) 两种方法都可以结果 QThreadPoolQRunnable实现 介绍由于线程池原理就是将一堆任务分到设置的几个线程中按照优先级先后执行所有在存在大批量任务的时候可以有效的管理线程的开销。QThreadPool c实现 缺点使用起来不是很灵活由于存在任务排队和优先级设置所有管理较复杂。 适用场景需要创建大量生命周期短小且逻辑重复简单的任务。 int activeThreadCount() const //当前的活动线程数量 void clear()//清除所有当前排队但未开始运行的任务 int expiryTimeout() const//线程长时间未使用将会自动退出节约资源此函数返回等待时间 int maxThreadCount() const//线程池可维护的最大线程数量 void releaseThread()//释放被保留的线程 void reserveThread()//保留线程此线程将不会占用最大线程数量从而可能会引起当前活动线程数量大于最大线程数量的情况 void setExpiryTimeout(int expiryTimeout)//设置线程回收的等待时间 void setMaxThreadCount(int maxThreadCount)//设置最大线程数量 void setStackSize(uint stackSize)//此属性包含线程池工作线程的堆栈大小。 uint stackSize() const//堆大小 void start(QRunnable *runnable, int priority 0)//加入一个运算到队列注意start不一定立刻启动只是插入到队列排到了才会开始运行。需要传入QRunnable 后续介绍 bool tryStart(QRunnable *runnable)//尝试启动一个 bool tryTake(QRunnable *runnable)//删除队列中的一个QRunnable若当前QRunnable 未启动则返回成功正在运行则返回失败 bool waitForDone(int msecs -1)//等待所有线程运行结束并退出参数为等待时间-1表示一直等待到最后一个线程退出 void setAutoDeletebool flag true//QRunnable的设置项用来标识是否在运行结束后自动由线程池释放空间 代码 .h #include QObject #include QRunnable class MRunnable : public QObject,public QRunnable {Q_OBJECT public:MRunnable(int num);void run();void setval(int index);int _index 0;int _num 0; };.cpp #include mrunnable.h #include QDebug #include QThreadMRunnable::MRunnable(int num) {qDebug()main threadQThread::currentThreadId(); }void MRunnable::setval(int index) {qDebug()---------setvalindexQThread::currentThreadId();_index index; }void MRunnable::run() {qDebug()_index_numthread 3QThread::currentThreadId();QThread::msleep(200); }调用 QThreadPool pool;pool.setMaxThreadCount(3);QListMRunnable* runs;for (int i 0; i 5; i) {MRunnable *run new MRunnable(44);run-setval(i);pool.start(run);}for (int i 0; i runs.size(); i) {delete runs[i];}runs.clear();结果 QFutureQtConcurrent实现: 介绍QFuture Qt Concurrent是Qt提供的一个并发编程框架用于简化多线程和并行计算的开发。它提供了一组易于使用的函数和类可以方便地在多线程环境下处理并发任务。优点简单易用、自动将大的问题拆分成更小的任务并分配给不同的线程并行执行、异步计算不会阻塞主线程。详细介绍1、详细介绍2 缺点交互麻烦。 使用场景需要临时使用一下线程的场景。 代码 .pro Qt concurrent .h #include QWidget #include QDebug #include QFuture #include QtConcurrent namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent nullptr);~Widget();public slots:void slotFinish(); private:Ui::Widget *ui;QFutureint m_future;QFutureWatcherint m_watcher; }; .cpp #include widget.h #include ui_widget.h Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui-setupUi(this);auto func([](int val){val 2*val;qDebug()thread 4valQThread::currentThreadId();return val;});//异步调用QObject::connect(m_watcher, QFutureWatchervoid::finished, this, Widget::slotFinish);int val 123;m_future QtConcurrent::run(func,val);m_watcher.setFuture(m_future);// future.waitForFinished();//同步调用qDebug()main threadQThread::currentThreadId()m_future.result(); }Widget::~Widget() {delete ui; }void Widget::slotFinish() {int res m_future.result();qDebug()watcher finishresQThread::currentThreadId(); } 结果 std::thread实现 介绍直接调用优点使用方便灵活。缺点无法完成复杂的交互。 适用场景适用需要临时创建线程的场景下。 代码 #include thread void test() {std::thread thread5([](){qDebug()thread 5QThread::currentThreadId();});thread5.detach();qDebug()main threadQThread::currentThreadId(); }结果
http://www.pierceye.com/news/504115/

相关文章:

  • 二级目录网站怎么做小程序开发成都公司
  • 网站标题名字和备案名字网站开发 质量管理
  • 网站与系统开发吉安网站建设收费
  • 湖北襄阳网站建设wordpress电商ar
  • 微做网站环保行业网站建设
  • 昭通做网站公司北京手机网站制作多少钱
  • 昆明企业建网站多少钱如何弄微信小程序
  • wordpress清理网站缓存做的比较简约的网站
  • 青岛高端网站制作中铁建设集团门户密码
  • 公司专业做网站做网站域名起什么作用
  • 推广型网站建设机构如何创建wordpress
  • 做网站交互demo工具在线设计自己的签名免费
  • 做百度推广会送网站吗网站建设和邮箱的关联
  • 假网站如何做济南天桥区网站建设
  • 顺企网我做网站余姚网站建设在哪里
  • 做网站logo用啥软件做电子书网站
  • 企业网站推广的策略有哪些php怎么建立站点
  • 找网站设计公司 看那些wordpress居中
  • 无锡网站营销公司哪家好全屏网页设计尺寸
  • 做第一个网站什么类型网站搜索引擎优化案例
  • 网站代码生成网站网站开发专业 工作意愿
  • ps做网站效果图尺寸如何重庆网站建设选夹夹虫
  • 上鼎工程建设有限公司网站最简单的手机网站制作
  • 网站维护企业网站的后缀名
  • 建设网站需要哪些认证做公众号的网站模板下载吗
  • 搜狗提交网站入口Wordpress登录后顶部的黑
  • 计算机网络技术就业方向及前景西安seo网站排名优化公司
  • 手机网站要求软文推广图片
  • 网站在哪里建立用h5开发的网站模板
  • 深圳建英文网站小学生作文网