首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法捕获来自QTcpServer的newConnection()信号

无法捕获来自QTcpServer的newConnection()信号
EN

Stack Overflow用户
提问于 2010-05-12 23:24:50
回答 1查看 2.6K关注 0票数 2

我正尝试在QT中创建一个简单的服务器线程来接受连接,然而,尽管服务器正在侦听(我可以使用我的测试应用程序进行连接),但我无法获得newConnection()信号以对其执行操作。

如果能帮上忙,我将不胜感激!

代码语言:javascript
复制
class CServerThread : public QThread
{
   Q_OBJECT

protected:
   void run();

private:
   QTcpServer*  server;

public slots:
   void  AcceptConnection();
};


void CServerThread::run()
{
   server = new QTcpServer;

   QObject::connect(server, SIGNAL(newConnection()), this, SLOT(AcceptConnection()));

   server->listen(QHostAddress::Any, 1000); // Any port in a storm

   exec(); // Start event loop
}


void CServerThread::AcceptConnection()
{
   OutputDebugStringA("\n***** INCOMING CONNECTION"); // This is never called!
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-12 23:42:13

首先,我可以说您的服务器驻留在新线程中,而CServerThread实例驻留在另一个线程中(在创建此实例的线程中)。您正在创建的信号/槽连接是间接的,并在两个不同线程的事件循环之间使用线程保存事件传递。如果你创建CServerThread的线程没有运行Qt事件循环,它实际上会导致这样的问题。

我建议您创建一些MyServer类来创建QTcpServer,调用listen并将QTcpServer::newConnection()信号连接到它自己的插槽。然后重写您的服务器线程run方法,如下所示:

代码语言:javascript
复制
void CServerThread::run() {
   server = new MyServer(host,port);
   exec(); // Start event loop
}

在这种方法中,QTcpServer和newConnection处理对象都位于同一个线程中。这样的情况更容易处理。

我有一个非常简单的工作示例:

Header:http://qremotesignal.googlecode.com/svn/tags/1.0.0/doc/html/hello_2server_2server_8h-example.html

来源:http://qremotesignal.googlecode.com/svn/tags/1.0.0/doc/html/hello_2server_2server_8cpp-example.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2820246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档