Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 阻塞套接字-waitForReadyRead()_C++_Qt_Qtcpsocket - Fatal编程技术网

C++ 阻塞套接字-waitForReadyRead()

C++ 阻塞套接字-waitForReadyRead(),c++,qt,qtcpsocket,C++,Qt,Qtcpsocket,目前在我的QT代码中,我有如下内容: QByteArray tick_stream; clntSocket->waitForReadyRead(); tick_stream = clntSocket->read(800); 在它陈述的文件中 此功能将一直阻止,直到新数据可用于读取,并且 readyRead信号已发出。函数将在之后超时 毫秒;默认超时为30000毫秒 在我的阻塞应用程序中,是否有任何方法可以使waitForReadyRead等待到无穷大您可以使用-1作为参数进行不确定

目前在我的QT代码中,我有如下内容:

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。因此,在这种特殊情况下,使用信号/插槽似乎更好。