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