Qt一步步搭建TcpServer3——关闭与启动

承接上章: Qt一步步搭建TcpServer2——线程池

本章将在上一章的基础上,讲述如何安全的关闭与启动Server。

前言

首先要更正上一篇的一个文字错误:
这里写图片描述
在这里这样用信号槽,并且删除Session是安全的。因为其事件循环机制是在按线程来的,在退出session线程之后,才会进入下一个线程的事件循环机制。因此这里不会存在这种隐患。

这里解释下,因为我代码是跟着博客每篇进度来写的,也就是说准备写某篇的时候,再把其功能实现,而设计这种工作本来是不断优化的。每一天的想法都可能不一样,或者说这算是具现每个阶段的过程思路,所以每一篇的代码,可以注意到和前一篇的方式和想法可能会略有出入。但整体不会变化。

1、Server启动

Server端的启动,主要依赖于监听端口和线程数量,可以封成Config类,包含数据的验证和初始化过程,如果需要拓展,也更方便:

TcpServer头文件:

//Server数据格式
struct ServerData
{
    uint16_t Port;
    uint32_t ThreadNum;
    //验证逻辑,不合法则设定初始值
    void Verify()
    {
        if(Port == 0)
            Port = 12345;
        if(ThreadNum)
            ThreadNum = std::thread::hardware_concurrency();
    }
};

class TcpServer : public QTcpServer
{
    Q_OBJECT
public:
    TcpServer();
    ~TcpServer();

    bool Start(ServerData &conf);

    ......

    //后面代码就不贴了

cpp:

bool TcpServer::Start(ServerData &conf)
{
    if(IsRunning_)
        return true;
    //验证数据
    conf.Verify();
     //启动线程池
    SessionThreads_.Start(conf.ThreadNum);
    //监听端口
    if(!this->listen(QHostAddress::Any, (quint16)conf.Port))
        
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值