C++ 阻塞套接字-waitForReadyRead()
目前在我的QT代码中,我有如下内容:C++ 阻塞套接字-waitForReadyRead(),c++,qt,qtcpsocket,C++,Qt,Qtcpsocket,目前在我的QT代码中,我有如下内容: QByteArray tick_stream; clntSocket->waitForReadyRead(); tick_stream = clntSocket->read(800); 在它陈述的文件中 此功能将一直阻止,直到新数据可用于读取,并且 readyRead信号已发出。函数将在之后超时 毫秒;默认超时为30000毫秒 在我的阻塞应用程序中,是否有任何方法可以使waitForReadyRead等待到无穷大您可以使用-1作为参数进行不确定
QByteArray tick_stream;
clntSocket->waitForReadyRead();
tick_stream = clntSocket->read(800);
在它陈述的文件中
此功能将一直阻止,直到新数据可用于读取,并且
readyRead信号已发出。函数将在之后超时
毫秒;默认超时为30000毫秒
在我的阻塞应用程序中,是否有任何方法可以使waitForReadyRead等待到无穷大您可以使用-1作为参数进行不确定的等待
clntSocket->waitForReadyRead(-1);
这在QIODevice的文档中,但不在派生的套接字类中
实际上,您应该使用Qt事件循环,并将插槽附加到readyRead信号,而不是阻塞线程。您可以使用-1作为参数进行不确定的等待
clntSocket->waitForReadyRead(-1);
这在QIODevice的文档中,但不在派生的套接字类中
实际上,您应该使用Qt事件循环并将插槽连接到readyRead信号,而不是阻塞线程。通过提供非常大的超时?通过提供非常大的超时?如果是专用线程,阻塞应该是好的-唯一的问题可能是当线程被阻塞时试图正确退出线程。显然阻塞线程在技术上没有什么问题,但是使用该信号与Qt设计模式更为一致。您是否同意Qt设计模式是另一回事:仅仅因为你可以使用一个信号,这并不意味着你必须:就像有QObject一样,你不必把所有的东西都变成QObject,事实上,你不应该这样。@FrankOsterfeld,根据Qt官方文档,Windows操作系统上的函数似乎有一些问题。虽然我在Linux上进行测试,但我发现了一些不规则的情况。我的代码实际上是在常规的C套接字中实现的,我移植到了Qt。因此,在这种特殊情况下,使用SIGNAL/SLOT似乎更好。如果它是一个专用线程,那么阻塞应该是好的-唯一的问题可能是在阻塞线程时尝试正确退出线程。显然,阻塞线程在技术上没有什么错,但使用该信号更符合Qt设计模式。您是否同意Qt设计模式是另一回事:仅仅因为你可以使用一个信号,这并不意味着你必须:就像有QObject一样,你不必把所有的东西都变成QObject,事实上,你不应该这样。@FrankOsterfeld,根据Qt官方文档,Windows操作系统上的函数似乎有一些问题。虽然我在Linux上进行测试,但我发现了一些不规则的情况。我的代码实际上是在常规的C套接字中实现的,我移植到了Qt。因此,在这种特殊情况下,使用信号/插槽似乎更好。