gpt4 book ai didi

objective-c - 如何正确测量 NSInputStream 数据速率

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:51:07 26 4
gpt4 key购买 nike

我正在尝试测量 ftp 下载期间的实际传输速度,下载本身正在运行,流连接在运行循环中。在事件开始和结束时使用 CFTimeGetCurrent 在 NSStreamEventHasBytesAvailable 中完成测量,在数据写入文件后,使用(双)previousTimestamp-CFAbsoluteTimeGetCurrent 计算耗时,但我得到的时间绝对不合理。在模拟器和设备上测试过,谁能赐教?

代码:

    switch (eventCode) {
case NSStreamEventOpenCompleted: {
} break;
case NSStreamEventHasBytesAvailable: {

if ([[self.fileStream propertyForKey:NSStreamFileCurrentOffsetKey] intValue]==0) {

previousTimestamp = CFAbsoluteTimeGetCurrent();

}

NSInteger bytesRead;
uint8_t buffer[32768];

bytesRead = [self.networkStream read:buffer maxLength:sizeof(buffer)];


if (bytesRead == -1)
{
[self _stopReceiveWithStatus:@"Err"];
}
else if (bytesRead == 0)
{

[self _stopReceiveWithStatus:nil];
}
else
{
[self completition:bytesRead];

NSInteger bytesWritten;
NSInteger bytesWrittenSoFar;

// Write to the file.

bytesWrittenSoFar = 0;
do {
bytesWritten = [self.fileStream write:&buffer[bytesWrittenSoFar] maxLength:bytesRead - bytesWrittenSoFar];
assert(bytesWritten != 0);
if (bytesWritten == -1) {
[self _stopReceiveWithStatus:@"File err"];
break;
} else {
bytesWrittenSoFar += bytesWritten;
}
} while (bytesWrittenSoFar != bytesRead);

[self downloadSpeedSave:bytesRead :previousTimestamp-CFAbsoluteTimeGetCurrent()];


previousTimestamp = CFAbsoluteTimeGetCurrent();

最佳答案

我使用的替代方法是使用 time.h 和 c 例程来捕获时间。

http://www.cplusplus.com/reference/clibrary/ctime/time/

关于 SO 的另一个很好的链接 iPhone: How to get current milliseconds?

关于objective-c - 如何正确测量 NSInputStream 数据速率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10858894/

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