QT QTcpServer in thread;如何在退出时关闭侦听服务器
QT QTcpServer in thread; how to close listening server on exit?
我有一个这样的线程子类
class MyThread : public QThread
{
public:
MyThread (void);
~MyThread (void);
void run();
void stop(); // close server and terminate thread
public slots:
void slotCloseServer();
signals:
void signalCloseServer();
private:
QTcpServer* m_pServer;
};
下面概述了run()
和整体类定义
MyThread::MyThread()
{
connect(this, SIGNAL(signalCloseServer()), this, SLOT(slotCloseServer()));
}
void MyThread::run()
{
m_pServer = new QTcpServer();
if(m_pServer->listen(QHostAddress(QHostAddress::LocalHost), 8888) == 0)
{
qCritical("Server listen failed.");
}
else
{
exec();
}
}
void MyThread::stop()
{
emit signalCloseServer();
quit(); // terminate thread
}
void MyThread::slotCloseServer()
{
if (m_pServer && m_pServer->isListening())
{
m_pServer->close();
}
}
现在从主线程,我想调用stop()
,以便它会向线程实例发出信号以关闭服务器并自行终止,但它永远不会slotCloseServer()
并且侦听端口不会释放。
关于如何在终止线程之前释放服务器套接字的任何想法?
谢谢
为什么不从 stop() 调用 slotCloseServer()?
void MyThread::stop()
{
slotCloseServer(); // close server
quit(); // terminate thread
}
void MyThread::slotCloseServer()
{
if (m_pServer && m_pServer->isListening())
{
m_pServer->close();
}
}
我认为对于在销毁创建的对象时应该执行某些操作的情况(在您的情况下是线程终止),最好在该对象的类析构函数中声明所需的操作:
MyThread ::~MyThread (void)
{
m_pServer->close();
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何让LLDB在成功时退出,在失败时等待
- C++控制台应用程序阻止退出
- 程序在执行程序的其余部分之前退出
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 构造函数在退出函数时无法初始化一个参数
- 为什么异常不退出程序?
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 从服务器传输到客户端的消息不会出现
- 退出简单while循环时出现问题
- Ubuntu 服务器管道在第一次退出时停止进程终止
- QT QTcpServer in thread;如何在退出时关闭侦听服务器
- 多线程服务器在不等待客户端连接的情况下退出
- c++程序退出段错误,查询时与MySQL服务器失去连接
- 我的服务器退出代码137