iam*_*ind 6 c++ ssl qt blocking qt-signals
使用Qt编写跨平台应用程序(包括带MinGW的Windows).为了从SSL套接字读取数据,我正在创建一个单独的线程.这个帖子是出于历史原因,因为之前的应用程序是使用C socket/ssl/crypto库编写的.现在所有这些都被Qt网络库取代了.
对于阻塞线程,waitForReadyRead(milliseconds)似乎是一个更好的选择.现在根据Qt层次结构:
QIODevice
|
QAbstractSocket
|
QTcpSocket
|
QSslSocket
Run Code Online (Sandbox Code Playgroud)
QAbscractSocket::waitForReadyRead()建议文件:
注意:此功能可能在Windows上随机失败.如果您的软件将在Windows上运行,请考虑使用事件循环和readyRead()信号.
但类似的警告是没有提到的QIODevice::waitForReadyRead().
问题:是否QSslSocket::waitForReadyRead()始终可用于所有平台?
为什么我没有使用readyRead()信号?
出于一些奇怪的原因,如果我使用readyRead()插入一些方法,那么它就不会被调用.此外,QSslSocket :: write()也不起作用,否则使用上述方法.由于我的代码很复杂,我无法在此处提供.
对于你的问题:是的你可以使用QSslSocket::waitForReadyRead()但是在Widows上它甚至可以在数据进入套接字时超时.因此,如果发生超时,您必须检查它是否超时或方法失败.如果QAbstractSocket::bytesAvailable() > 0数据准备好读取则检查很简单,否则超时.
当您使用小超时并且您的应用程序对延迟不敏感时(例如温度传感器和云与温度历史记录之间的通信),这种方法是可行的.但是如果您不接受任何不必要的延迟,那么您应该使用信号/插槽接口.
有关更多信息,您可以查看Qt的错误跟踪器上的错误报告.
| 归档时间: |
|
| 查看次数: |
2163 次 |
| 最近记录: |