stdについて::cinブロックイベントループおよびコンソールコマンド入力機能のスキーム;
1111 ワード
std::cinをプライマリ・スレッドに確立すると、プライマリ・スレッドのすべてのイベント・ループがブロックされます.したがって、イベント・ループが影響を受けないことを保証するには、std::cinを配置する必要があります.
サブスレッド内.また、std::cinブロックを強制的に終了させることができるようにするには、スレッドを強制的に終了させることによって実現することができる.
すなわち
入力をオンにします.
スレッドを強制的に閉じる:
サブスレッド内.また、std::cinブロックを強制的に終了させることができるようにするには、スレッドを強制的に終了させることによって実現することができる.
すなわち
class Loop:public QThread
{
Q_OBJECT
public:
explicit Loop(QObject *parent = nullptr){}
void run(){
std::cout<>";
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;
}