我正在使用从QIODevice派生的QLocalSocket。 QIODevice::write的文档说



在什么情况下,函数写入的数据少于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的文档,这不应该是蜜蜂



因此,我感到非常困惑。
任何人都可以对此有所了解吗?

最佳答案

我解决了这样的问题,它在单独的线程中运行write方法,并且主线程不会阻塞

...
QtConcurrent::run(this, &MyClass::writeAsync, sock, data);
...

void MyClass::writeAsync(QLocalSocket socket, QByteArray data) {
    socket->write(data);
}

08-16 17:01