如何在qlocalsocket中写入所有数据::写不阻止

How to write all data in QLocalSocket::write without blocking?

本文关键字:数据 qlocalsocket      更新时间:2023-10-16

我正在使用从qiodevice得出的qlocalsocket。QIODevice::write的文档说

最多将数据从数据到设备编写。返回实际编写的字节数,如果发生错误,则返回-1。

我在函数少于 maxSize字节的何种情况下感到困惑,并且文档似乎并没有告诉我。我可以这样循环

for(int written = 0; written != len;) {
  int writtenNow = sock->write(data + written, len - written);
  if(writtenNow != -1) {
    written += writtenNow;
  } else {
    // oops, call cops!
  }
}

但是,当它不写所有数据时该怎么办?我应该打电话给waitForBytesWritten吗?根据QLocalSocket的文档,这不应该蜜蜂

尽管Qlocalsocket旨在与事件循环一起使用,但可以无需使用它。在这种情况下,您必须使用waitforConnected(),waitforreadyread(),waitforbyteswrittit()和waitfordisconnected(),该()封锁直到操作完成或超时到期。

因此,我感到非常困惑。谁能为此阐明吗?

i解决了这样的问题,它在单独的线程中运行写入方法,而主线程不会阻止

...
QtConcurrent::run(this, &MyClass::writeAsync, sock, data);
...
void MyClass::writeAsync(QLocalSocket socket, QByteArray data) {
    socket->write(data);
}