Qt 搭建简单的客户端和服务器

致青春

搭建简单的客户端和服务器遇到的问题

  1. 采用三层架构,connectServer.cpp里面起工作线程,逻辑层里面生成connectServer对象,运行时,工作线程里面的打印不生效。
    /// 工作线程/// 工作线程
    void ConnectServer::run()
    {
    while (!m_stopThread)
    {
    qDebug() << “123client”;
    msleep(1000);
    }

    quit();
    }

答:
必须起一个界面。在逻辑层的show函数内。
void LogicLayer::show()
{
m_client->show();
}

问题2 关闭客户端后,出现关闭运行的线程错误,并且错误号是3.
QThread: Destroyed while thread is still running
123client // 线程打印信息
QWaitCondition: Destroyed while threads are still waiting
G:/Qt/test/build-QtMultiThread-Desktop_Qt_5_9_6_MinGW_32bit-Debug/debug/QtMultiThread exited with code 3

答:
没有正确的关闭线程导致的问题,即关闭界面,工作线程还在运行中。所以应该用关闭事件closeEvent(),触发信号和槽,在逻辑层通过connectServer对象关闭它内部的工作线程.
step 1 界面关闭事件
void Client::closeEvent(QCloseEvent *ev)
{
qDebug() << “void Client::closeEvent(QCloseEvent *ev)”;
emit signalCloseThread();
ev->accept(); // 这个不能忘了
}

step 2 逻辑层接收信号,并执行关闭线程命令
void LogicLayer::slotCloseThread()
{
m_connectServer->stopThread();
}

step 3 m_connectServer对象关闭工作线程
void ConnectServer::stopThread()
{
m_stopThread = true;
this->exit();
this->wait();
}

Qt 搭建简单的客户端和服务器_第1张图片

你可能感兴趣的:(Qt)