3

我正在使用从 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吗?根据 的文档QLocalSocket,这不应该是必要的

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

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

4

1 回答 1

0

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

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

void MyClass::writeAsync(QLocalSocket socket, QByteArray data) {
    socket->write(data);
}
于 2012-11-12T15:40:47.647 回答