zoukankan      html  css  js  c++  java
  • 关于std::cin阻塞事件循环以及控制台命令输入功能的方案;

    如果将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;
        }
    

      

  • 相关阅读:
    [OpenJudge] 反正切函数的应用 (枚举)(数学)
    [OpenJudge] 摘花生 (模拟)
    [OpenJudge] 宇航员(模拟)
    [OpenJudge] 显示器(模拟)
    背包问题
    BFS_最短路径
    链表
    网站
    网站
    洛谷_递归整理
  • 原文地址:https://www.cnblogs.com/yinwei-space/p/10774426.html
Copyright © 2011-2022 走看看