如果将std::cin建立在主线程,将阻塞主线程的所有事件循环,因而要保证事件循环不受影响,需要将std::cin放到
子线程中。同时,如果要实现能够强制终止std::cin阻塞, 可以通过强制终止线程的方式来实现。
即
class Loop:public QThread { Q_OBJECT public: explicit Loop(QObject *parent = nullptr){} void run(){ std::cout<<" OTAI>>"; 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; }