如何在qlocalsocket中写入所有数据::写不阻止
How to write all data in QLocalSocket::write without blocking?
本文关键字:数据 qlocalsocket 更新时间:2023-10-16
我正在使用从qiodevice得出的qlocalsocket。QIODevice::write
的文档说
最多将数据从数据到设备编写。返回实际编写的字节数,如果发生错误,则返回-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(),waitforbyteswrittit()和waitfordisconnected(),该()封锁直到操作完成或超时到期。
。
因此,我感到非常困惑。谁能为此阐明吗?
i解决了这样的问题,它在单独的线程中运行写入方法,而主线程不会阻止
...
QtConcurrent::run(this, &MyClass::writeAsync, sock, data);
...
void MyClass::writeAsync(QLocalSocket socket, QByteArray data) {
socket->write(data);
}
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 如何在qlocalsocket中写入所有数据::写不阻止