gpt4 book ai didi

c++ - QIODevice::waitForReadyRead 是否隐式刷新输出队列(waitForBytesWritten)?

转载 作者:太空宇宙 更新时间:2023-11-04 13:26:28 25 4
gpt4 key购买 nike

如果我想将数据写入远程端并等待它的响应,我至少需要一个waitForReadyRead。但在调用它之前,我是否需要使用 waitForBytesWritten 手动刷新输出队列,或者 Qt 会自动为我刷新写入队列?我正在同步操作(阻塞),因此在此函数中我无法使用事件循环或本地事件循环。

当使用 std::cin 时,我们可以确定之前由 std::cout 写入的字节将被刷新。这是类似的情况 - 它也适用于 Qt 套接字吗?

最佳答案

如果您查看 source code ,作为一个抽象基类,QIODevice 在 waitForReadyRead 中做的很少,它取决于继承类的实现:

bool QIODevice::waitForReadyRead(int msecs)
{
Q_UNUSED(msecs);
return false;
}

does it apply to Qt sockets aswell?

正如您所说的同步操作,我假设您选择它是有原因的,并且知道在主线程上,任何存在的 GUI 都会在调用 waitForReadyRead 期间卡住>。通常,QIODevice 的异步使用是首选,Qt 是一个事件驱动的框架。

然而,Qt docs状态:

Certain subclasses of QIODevice, such as QTcpSocket and QProcess, are asynchronous.

因此,如果您的 QIODevice 是一个套接字,例如 QTcpSocket,那么不,您不应该被要求在调用 waitForReadyRead 时调用 waitForBytesWritten

在非同步设备的情况下,这是必需的。

关于c++ - QIODevice::waitForReadyRead 是否隐式刷新输出队列(waitForBytesWritten)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33211220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com