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

南宁 建网站知道网站域名怎么联系

南宁 建网站,知道网站域名怎么联系,扁平化网页设计图片,产品设计专业就业前景如何在项目中经常需要等待#xff0c;我们模拟0-30的数#xff0c;假如我们其中5#xff0c; 25的数需要进行等待#xff0c;等待用户处理完自己事情后#xff0c;按下按钮继续#xff0c;找Qt的项目中有一个 QStateMachineqstatemmachine类提供了一个分层有限状态机。 QSta…在项目中经常需要等待我们模拟0-30的数假如我们其中5 25的数需要进行等待等待用户处理完自己事情后按下按钮继续找Qt的项目中有一个 QStateMachineqstatemmachine类提供了一个分层有限状态机。 QStateMachine基于Statecharts的概念和符号。qstatemmachine是状态机框架的一部分。 状态机管理一组状态从QAbstractState继承的类和这些状态之间的转换QAbstractTransition的后代这些状态和转换定义了一个状态图。一旦构建了状态图状态机就可以执行它。qstatemmachine的执行算法基于状态图XML SCXML算法。该框架的概述给出了几个状态图和构建它们的代码。 使用addState函数向状态机添加顶级状态。使用removeState函数删除状态。不鼓励在机器运行时删除状态。 在机器启动之前必须设置初始状态。初始状态是机器启动时进入的状态。然后可以启动状态机。当进入初始状态时就会发出started信号。 机器是事件驱动的并保持自己的事件循环。事件通过postEvent发送到机器。请注意这意味着它是异步执行的并且如果没有正在运行的事件循环它将无法进行。你通常不需要将事件直接发布到机器上因为Qt的转换例如QEventTransition和它的子类会处理这个。但是对于由事件触发的自定义转换postEvent很有用。 状态机处理事件并进行转换直到进入顶级最终状态然后状态机发出finished信号。您还可以显式地stop状态机。在这种情况下会发出stopped信号。 下面的代码片段显示了一个状态机当按钮被点击时状态机将完成 QPushButton button;QStateMachine machine;QState *s1 new QState();s1-assignProperty(button, text, Click me);QFinalState *s2 new QFinalState();s1-addTransition(button, SIGNAL(clicked()), s2);machine.addState(s1);machine.addState(s2);machine.setInitialState(s1);machine.start(); 那么我们实现自己 Processor类 #ifndef PROCESSOR_H #define PROCESSOR_H#include QObject #include QStateMachine #include QState #include QFinalStateclass Processor : public QObject {Q_OBJECT public:explicit Processor(QObject *parent nullptr);void startProcessing();void resumeProcessing();signals:void progressUpdated(int value);void runSig();void paused();void finished();private:void processNextItem();bool isRunning() const;private:QStateMachine *m_machine;QState *m_runningState;QState *m_pausedState;QFinalState *m_finishedState;int m_currentIndex; };#endif // PROCESSOR_H#include processor.h #include QDebug #include QTimer #include QThreadProcessor::Processor(QObject *parent): QObject(parent),m_machine(new QStateMachine(this)),m_runningState(new QState(m_machine)),m_pausedState(new QState(m_machine)),m_finishedState(new QFinalState(m_machine)),m_currentIndex(0) {// 配置运行状态connect(m_runningState, QState::entered, [this]() {qDebug() Entered running state;processNextItem();});// 配置暂停状态connect(m_pausedState, QState::entered, [this]() {qDebug() Entered paused state;});// 配置暂停状态 // connect(m_finishedState, QState::entered, [this]() { // qDebug() Entered finished state; // });// 配置状态转换m_runningState-addTransition(this, Processor::paused, m_pausedState);m_pausedState-addTransition(this, Processor::runSig, m_runningState);m_runningState-addTransition(this, Processor::finished, m_finishedState);// 配置状态机m_machine-setInitialState(m_runningState);}bool Processor::isRunning() const {return m_machine-isRunning(); }void Processor::startProcessing() {if (!m_machine-isRunning()) {qDebug() Starting processing...;m_machine-start();} }void Processor::resumeProcessing() {m_currentIndex;emit runSig();}void Processor::processNextItem() {if (m_currentIndex 30) {emit finished();return;}emit progressUpdated(m_currentIndex);if (m_currentIndex 5 || m_currentIndex 25) {qDebug() --- Reached pause point ---;emit paused();}else { // 只有非暂停点时继续自动处理m_currentIndex;QThread::msleep(200); //模拟耗时操作processNextItem();} }单例模式 #ifndef TASKPROCESSOR_H #define TASKPROCESSOR_H#include QObject #include QStateMachine #include QState #include QFinalState #include QQueue #include QMutex #include functionalclass TaskProcessor : public QObject {Q_OBJECT public:// 单例接口保证全局唯一static TaskProcessor getInstance() {static TaskProcessor processor;return processor;}// 添加任务到队列void addTask(const std::functionvoid() task);// 开始处理任务队列void startProcessing();// 暂停任务处理例如等待外部事件void pauseProcessing();// 恢复任务处理void resumeProcessing();signals:// 任务状态信号可根据需求扩展void pausedSig();void resumeSig();void taskStarted();void taskFinished();void allTasksFinished();private:// 构造函数私有确保单例explicit TaskProcessor(QObject *parent nullptr);Q_DISABLE_COPY(TaskProcessor)// 内部处理任务队列的方法void processNextTask();// 任务队列及同步保护QQueuestd::functionvoid() m_taskQueue;QMutex m_mutex;// 状态机及状态QStateMachine *m_machine;QState *m_runningState;QState *m_pausedState;QFinalState *m_finishedState; };#endif // TASKPROCESSOR_H#include processor.h #include QDebug #include QThreadTaskProcessor::TaskProcessor(QObject *parent): QObject(parent),m_machine(new QStateMachine(this)),m_runningState(new QState(m_machine)),m_pausedState(new QState(m_machine)),m_finishedState(new QFinalState(m_machine)) {// 配置运行状态进入运行状态时尝试处理下一个任务connect(m_runningState, QState::entered, this, [this]() {qDebug() Entered running state;processNextTask();});// 配置暂停状态仅做记录具体暂停逻辑可通过状态机外部控制connect(m_pausedState, QState::entered, this, [this]() {qDebug() Entered paused state;});// 状态切换配置暂停和恢复m_runningState-addTransition(this, SIGNAL(pausedSig()), m_pausedState);m_pausedState-addTransition(this, SIGNAL(resumeSig()), m_runningState);// 当任务全部处理完毕时切换到结束状态m_runningState-addTransition(this, SIGNAL(allTasksFinished()), m_finishedState);// 状态机初始状态设为运行状态m_machine-setInitialState(m_runningState); }void TaskProcessor::addTask(const std::functionvoid() task) {QMutexLocker locker(m_mutex);m_taskQueue.enqueue(task); }void TaskProcessor::startProcessing() {if (!m_machine-isRunning()) {qDebug() Starting Task Processing...;m_machine-start();} }void TaskProcessor::pauseProcessing() {// 可以发出信号通知状态机进入暂停状态qDebug() Requesting pause...;emit pausedSig(); // 此处 SIGNAL 与状态机转换绑定 }void TaskProcessor::resumeProcessing() {// 发出信号恢复处理qDebug() Requesting resume...;emit resumeSig();processNextTask(); }void TaskProcessor::processNextTask() {QMutexLocker locker(m_mutex);if (m_taskQueue.isEmpty()) {qDebug() All tasks finished.;emit allTasksFinished();return;}// 取出队列中的下一个任务std::functionvoid() task m_taskQueue.dequeue();// 在运行状态下开始任务发出任务开始信号emit taskStarted();qDebug() Processing a task...;// 这里可以在一个独立线程中运行任务避免阻塞状态机// 例如QThread::sleep() 或者使用 QtConcurrenttask();// 任务执行完成发出任务结束信号emit taskFinished();}
http://www.hkea.cn/news/14384276/

相关文章:

  • 哈尔滨建设工程招聘信息网站湖南搜索引擎推广平台
  • 网站开发如何跟客户沟通需求简历在线编辑免费
  • html5的网站设计二级域名分发网站
  • 深圳网站制作设计猎场第几集做的网站推广
  • 成都网站建设qghlwordpress注册免邮件
  • 做的网站在小窗口中怎么保持中间网站建设 开发网站代码
  • 上海网站建设与设计浙江中钦建设有限公司网站
  • c2c电子商务网站食品建设网站
  • 珠海网站设计京东联盟 wordpress
  • 怎么做自己的外卖网站wordpress小清新模板
  • 哪些网站可以做设计赚钱中盛腾龙建设工程有限公司网站
  • 北京品牌网站开发什么是网站集约化建设
  • 集团网站建设h5动态页面怎么做的
  • 网站建设总体目标英文响应式网站建设
  • 龙华做棋牌网站建设哪家公司便宜网站建立与推广
  • 巩义网站建设方案表全面的vi设计公司
  • 影响网站访问速度服务器怎样做网站呢
  • 建设游戏网站需要哪些设备wordpress 快速安装
  • 上海网站建设科技公司丹东发布最新通告
  • wordpress怎么排版网站建设需要做的优化工作
  • 网站正在建设页面找做柜子的网站
  • 网站建设合同附件明细甘肃省城乡住房建设厅网站
  • 如何把网站设为正确建设中企业的所得税费用怎么算
  • wordpress更新后不可编辑企业seo关键字优化
  • 网站开发的形式有企业网站和信息化建设
  • 网站建设厘金手指排名十九wordpress企业文化模板
  • 免费设计房屋的网站杭州网站建设服务公司
  • 网站制作多久常州做网站找哪家好
  • 做什么类型网站可以吸引用户陕西交通建设养护工程有限公司网站
  • 上海徐家汇网站建设会议网站建设方案