使用Qt编写跨平台应用程序(包括在Windows上使用MinGW)。为了从SSL套接字读取数据,我创建了一个单独的线程。这个线程是由于历史原因而存在的,因为早期该应用程序是使用C套接字/ssl/crypto库编写的。现在所有这些都被Qt网络库替换。
对于阻塞线程,waitForReadyRead(milliseconds)
似乎是更好的选择。根据Qt层次结构:
QIODevice
|
QAbstractSocket
|
QTcpSocket
|
QSslSocket
QAbscractSocket::waitForReadyRead()
的文档建议:
注意:此函数在Windows上可能会随机失败。如果您的软件将在Windows上运行,请考虑使用事件循环和readyRead()信号。
但是在QIODevice::waitForReadyRead()
中没有提到类似的警告。
问题:是否可以在所有平台上一致地使用QSslSocket::waitForReadyRead()
?
为什么我不使用readyRead()信号?
由于某种奇怪的原因,如果我通过readyRead()槽调用某些方法,则不会被调用。而且,QSslSocket::write()也无法正常工作,而以上方法可以正常工作。由于我的代码复杂,所以我无法在这里呈现它。
readyRead
发射器和接收器在不同的线程上,你确定接收器的线程有一个活动事件循环吗?另外,我无法帮助感觉到使用waitForReadyRead
只会暂时掩盖真正潜在问题的症状。 - G.M.readyRead()
,我确信我的代码/理解方面存在问题,导致它无法正常工作。但是,如果我必须使用waitFor...()
方法,那么我的当前设计就可以自行工作。唯一的担心是它的Windows实现。另一个较小的问题是,有时QtreadyRead()
会在多个连续数据消息之后被发出。在这种情况下,socket-select()
更快。 - iammilind