我对QTcpServer如何在线程和阻塞的幕后工作感兴趣.QTcpServer有一个listen()方法立即返回.如果侦听成功启动,服务器将发出信号newConnection().我感兴趣的是当listen()方法返回时服务器是如何监听的(它是在主线程上).使用QTcpServer的控制台应用程序的常见示例如下所示:
//main.cpp
int main(int argc, char* argv[])
{
QCoreApplication app;
MyServer server;
app.exec();
}
//MyServer.cpp
MyServer::MyServer(QObject *parent) : QObject(parent)
{
this->server = new QTcpServer(this);
connect(server, SIGNAL(newConnection()), this, SLOT(on_newConnection()));
if (!server->listen(QHostAddress::Any, 1234))
//do something in case of error
}
void MyServer::on_newConnection()
{
QTcpSocket* socket = server->nextPendingConnection();
//do some communication...
}
Run Code Online (Sandbox Code Playgroud)
是QTcpServer依赖于QCoreApplication(或者一个QRunLoop)现有和运行recive网络事件.它可以在没有QCoreApplication::exec()被叫的情况下正常工作吗?
我在互联网上找不到任何相关内容,所以我正在寻找能够深入了解C++/CX的方式的人.在维基百科的文章对C++/CX说,它支持基于运行时的仿制药,至极将意味着你不需要与全面实施的头文件,以实例化一个泛型类型.我承诺它如何适用于.NET(程序集包含IL代码,JIT只能在其中插入具体类型并在有新的实例化时编译它),但在C++/CX(本机编译)中没有JIT可以编辑运行时的代码(我认为x86机器代码非常难)
那么这里有什么诀窍,是用拳击或一些新设计方案进行类型擦除?
(我知道有关类型的元数据以.NET格式存储,我在方法中的代码之后)