若是將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; }