關於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;
    }
相關文章
相關標籤/搜索