C++ 如何在QLocalSocket::write中写入所有数据而不阻塞?

C++ 如何在QLocalSocket::write中写入所有数据而不阻塞?,c++,qt4,C++,Qt4,我使用的是从QIODevice派生的QLocalSocket。QIODevice::write的文档中说 将数据中最多maxSize字节的数据写入设备。返回实际写入的字节数,如果发生错误,返回-1 我很困惑函数在什么情况下写入的数据少于maxSize字节,而文档似乎没有告诉我这一点。我可以这样打圈 for(int written = 0; written != len;) { int writtenNow = sock->write(data + written, len - writ

我使用的是从QIODevice派生的QLocalSocket。
QIODevice::write
的文档中说

将数据中最多maxSize字节的数据写入设备。返回实际写入的字节数,如果发生错误,返回-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!
  }
}
但是当它没有写入所有数据时该怎么办呢?我应该给WaitForBytesWrite打电话吗?根据
QLocalSocket
的文档,这应该是不需要的

尽管QLocalSocket是为与事件循环一起使用而设计的,但在没有事件循环的情况下也可以使用它。在这种情况下,必须使用waitForConnected()、waitForReadyRead()、WaitForBytesWrite()和waitForDisconnected(),这将阻止操作完成或超时

因此,我深感困惑。
有人能解释一下吗?

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

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

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