【发布时间】:2016-10-17 05:23:23
【问题描述】:
我在文档中搜索了bytesToWrite,发现“对于缓冲设备,此函数返回等待写入的字节数。对于没有缓冲区的设备,此函数返回 0。”
首先,缓冲设备是什么意思。任何人都可以向我解释一下这个功能到底是做什么的以及我在哪里或如何使用它。
【问题讨论】:
标签: qt qtcpsocket
我在文档中搜索了bytesToWrite,发现“对于缓冲设备,此函数返回等待写入的字节数。对于没有缓冲区的设备,此函数返回 0。”
首先,缓冲设备是什么意思。任何人都可以向我解释一下这个功能到底是做什么的以及我在哪里或如何使用它。
【问题讨论】:
标签: qt qtcpsocket
很多IO设备都是缓冲的,也就是说数据不是马上发送的,而是累积到足够量的时候批量发送。
这样做本质上是为了获得更好的性能,因为发送数据通常有一些固定的开销(至少是系统调用开销),这在批量发送数据时可以很好地摊销,但如果发生这种情况,则必须为每次写入付费不会使用缓冲。
(注意这里我们只讨论QIODevice缓冲区,通常还有也各种内核模式缓冲区和硬件设备本身内部的缓冲区)
bytesToWrite 告诉您QIODevice 写入缓冲区中有多少内容,即您写入的等待实际写入的字节数(例如,给操作系统写入)。
我实际上从未使用过该成员,但我认为它可能很有用,例如在生产者-消费者场景中(=如果写入缓冲区低于某个值,那么您必须实际计算要发送的下一个数据块),在某些地方手动处理缓冲,甚至只是为了调试/记录目的。
【讨论】:
当您使用异步 API 时,它实际上非常有用。 例如,您可以在 bytesWritten() 插槽中使用它来判断缓冲区是否为空以及数据是否已完全写入。
【讨论】: