gpt4 book ai didi

objective-c - 我可以为 NSFileHandleReadCompletionNotification 使用较小的缓冲区吗?

转载 作者:行者123 更新时间:2023-12-03 16:45:00 25 4
gpt4 key购买 nike

我正在从 NSNotificationCenter 读取 NSFileHandleReadCompletionNotification 消息,以接收来自 NSTask 的消息。问题是我调用的命令行程序输出行相对较慢,并且似乎 NSFileHandleReadCompletionNotification 消息发布的频率相对较低(我猜当缓冲区填满时)。

我是否可以使用另一个通知消息来发布通知或每一行,或者有没有办法使缓冲区更小?

编辑:需要明确的是,我在 NSFileHandle documentation 中读到缓冲区大小“仅限于底层操作系统的缓冲区大小”。 ,所以,我希望还有其他的技巧。

最佳答案

如果您通过以下方式读取 NSFileHandle

- (void)readInBackgroundAndNotify

方法(对吗?),并在 NSFileHandleReadCompletionNotification 处理程序中解析数据 - 因此,缓冲区大小不受限制 - 在收到通知之前,所有“availableData”都将在后台读取,然后您再次调用 readInBackgroundAndNotify 来获取下一部分...

但是我相信您的问题是由于众所周知的 I/O 缓冲技术而发生的。

您应该在任务命令端关闭缓冲。例如,如果您调用 Perl 脚本,只需添加行

$|=1;

use IO::Handle;
STDOUT->autoflush(1);
STDERR->autoflush(1);

靠近脚本顶部。

对于 C 程序 - 使用 setvbuf 函数将缓冲区大小设置为零。

关于objective-c - 我可以为 NSFileHandleReadCompletionNotification 使用较小的缓冲区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1971890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com