我试图通过使用QRunnable和QThreadPool而不是每个连接1个线程,以可扩展的方式使用Qt 5.2编写tcp服务器 .
我遇到的问题是在QRunnable :: run中创建的套接字在创建它时设置了连接状态并设置了它的套接字描述符,但调用readAll()以响应readyRead信号会产生一个空缓冲区,即使我知道我发了一些数据 .
我尝试将套接字从主线程传递到QRunnable的两种方法是:
1)从QTcpServer :: nextPendingConnection获取QTcpSocket并将套接字描述符传递给QRunnable .
2)覆盖QTcpServer :: incomingConnection并从那里获取套接字描述符并将其传递给QRunnable .
两者都给出相同的结果,接收套接字readyread信号但readAll返回一个空缓冲区 .
任何帮助将非常感谢 .
1 回答
感谢RobbieE纠正我的误解 . 以下是如何编写使用QRunnables和QThreadpool的Tcp服务器的工作示例 . 我是Qt的新手所以欢迎任何批评/改进/讨论 . 代码不是 生产环境 质量,只是编写可伸缩tcp服务器的简单示例 .
server.h
server.cpp
myrunnable.h
myrunnable.cpp