zoukankan      html  css  js  c++  java
  • 关于std::cin阻塞事件循环以及控制台命令输入功能的方案;

    如果将std::cin建立在主线程,将阻塞主线程的所有事件循环,因而要保证事件循环不受影响,需要将std::cin放到

    子线程中。同时,如果要实现能够强制终止std::cin阻塞, 可以通过强制终止线程的方式来实现。

    class  Loop:public QThread
    {
        Q_OBJECT
    public:
        explicit  Loop(QObject *parent = nullptr){}
        void run(){       
            std::cout<<"
    OTAI>>";
            char str[200] = {0};
            std::cin.getline(str,200);
            emit  command(QString(str));
        }
    signals:
        void      command(QString  szCmd);
    private slots:
    };
    

    开启输入: 

     if(!m_pLoop)      // Loop * m_pLoop;
        {
            m_pLoop = new EventLoop;
            QObject::connect(m_pLoop,SIGNAL(command(QString)), this,SLOT(excuteCmd(QString)));
            m_pLoop->start();
        }
    

    强制关闭线程:

        if(m_pLoop)
        {
            m_pLoop->terminate();
            m_pLoop->wait(200);
            m_pLoop = nullptr;
        }
    

      

  • 相关阅读:
    事件的解除与绑定
    JavaScript 继承
    left 和 margin-left
    表格 DOM 操作
    基于继承的拖拽
    碰撞运动
    弹性运动
    完美运动框架
    JS 操作 Cookie
    DIV拖拽
  • 原文地址:https://www.cnblogs.com/yinwei-space/p/10774426.html
Copyright © 2011-2022 走看看