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

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

class  Loop:public QThread
{
    Q_OBJECT
public:
    explicit  Loop(QObject *parent = nullptr){}
    void run(){       
        std::cout<<"\nOTAI>>";
        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;
    }

  

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄