关于std::cin阻塞事件循环以及控制台命令输入功能的方案;

若是将std::cin创建在主线程,将阻塞主线程的全部事件循环,于是要保证事件循环不受影响,须要将std::cin放到oop

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

线程

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:
};

开启输入: blog

 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;
    }
相关文章
相关标签/搜索