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();
}

client.cpp 是界面,connectServer是工作线程

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值