我正在使用源自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(),它们将一直阻塞,直到操作完成或超时到期。
答案 0 :(得分:0)
我解决了这样的问题,它在单独的线程中运行write方法而主线程没有阻塞
...
QtConcurrent::run(this, &MyClass::writeAsync, sock, data);
...
void MyClass::writeAsync(QLocalSocket socket, QByteArray data) {
socket->write(data);
}