私はこのようなスレッドサブクラスを持っています
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()
到達することはなく、リスニングポートは解放されません。
スレッドを終了する前にサーバーソケットを解放する方法について何か考えはありますか?
ありがとう、