我不明白函数 bytesToWrite() Qt 到底是做什么的
I don't understand what exactly does the function bytesToWrite() Qt
我在文档中搜索了 bytesToWrite
并且找到了 "For buffered devices, this function returns the number of bytes waiting to be written. For devices with no buffer, this function returns 0."
首先什么是缓冲设备。任何人都可以向我解释这个功能到底是做什么的,我可以在哪里或如何使用它。
很多IO设备都是buffered,就是说数据不是直接发送,而是累积起来,等量够了再批量发送。
这样做本质上是为了获得更好的性能,因为发送数据通常有一些固定的开销(至少是系统调用开销),在批量发送数据时可以很好地分摊,但必须为每个开销付费如果不使用缓冲则写入。
(注意这里我们只讨论QIODevice
缓冲区,通常还有也各种内核模式缓冲区和硬件设备本身的内部缓冲区)
bytesToWrite
告诉您 QIODevice
写入缓冲区中有多少内容,即您写入的字节数等待 实际 写入(如中,给OS写)。
我实际上从来没有用过那个成员,但我想它可能很有用,例如在生产者-消费者场景中(=如果写缓冲区低于某个值,那么您必须实际计算要发送的下一个数据块),在某些地方手动处理缓冲,甚至只是为了 debugging/logging 目的.
当您使用异步 API 时,它实际上非常有用。
例如,您可以在 bytesWritten() 插槽中使用它来判断缓冲区是否为空以及数据是否已完全写入。
我在文档中搜索了 bytesToWrite
并且找到了 "For buffered devices, this function returns the number of bytes waiting to be written. For devices with no buffer, this function returns 0."
首先什么是缓冲设备。任何人都可以向我解释这个功能到底是做什么的,我可以在哪里或如何使用它。
很多IO设备都是buffered,就是说数据不是直接发送,而是累积起来,等量够了再批量发送。
这样做本质上是为了获得更好的性能,因为发送数据通常有一些固定的开销(至少是系统调用开销),在批量发送数据时可以很好地分摊,但必须为每个开销付费如果不使用缓冲则写入。
(注意这里我们只讨论QIODevice
缓冲区,通常还有也各种内核模式缓冲区和硬件设备本身的内部缓冲区)
bytesToWrite
告诉您 QIODevice
写入缓冲区中有多少内容,即您写入的字节数等待 实际 写入(如中,给OS写)。
我实际上从来没有用过那个成员,但我想它可能很有用,例如在生产者-消费者场景中(=如果写缓冲区低于某个值,那么您必须实际计算要发送的下一个数据块),在某些地方手动处理缓冲,甚至只是为了 debugging/logging 目的.
当您使用异步 API 时,它实际上非常有用。 例如,您可以在 bytesWritten() 插槽中使用它来判断缓冲区是否为空以及数据是否已完全写入。