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

时间:2012-11-12 12:33:17

标签: c++ qt4

我正在使用源自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!
  }
}

但是当它没有写出所有数据时该怎么办?我应该致电waitForBytesWritten吗?根据{{​​1}}的文档,这不应该是

  

虽然QLocalSocket设计用于事件循环,但可以在没有事件循环的情况下使用它。在这种情况下,您必须使用waitForConnected(),waitForReadyRead(),waitForBytesWritten()和waitForDisconnected(),它们将一直阻塞,直到操作完成或超时到期。

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

1 个答案:

答案 0 :(得分:0)

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

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

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