繁体   English   中英

如何正确测量NSInputStream数据速率

[英]How to correctly measure NSInputStream data rate

我正在尝试测量ftp下载期间的实际传输速度,下载本身正在运行,流已挂接到运行循环中。 在事件开始和结束时使用CFTimeGetCurrent在NSStreamEventHasBytesAvailable中进行测量,在将数据写入文件后,使用(double)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上的另一个很好的链接:如何获取当前毫秒数?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM