gpt4 book ai didi

c++ - 线程中的QT QTcpServer;如何在退出时关闭监听服务器?

转载 作者:太空宇宙 更新时间:2023-11-04 14:13:47 25 4
gpt4 key购买 nike

我有一个这样的线程子类

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

关于c++ - 线程中的QT QTcpServer;如何在退出时关闭监听服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com