2

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();
4

1 に答える 1

1

私が使用した別の方法は、time.h および c ルーチンを使用して時間をキャプチャすることです。

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

SO iPhoneの別の良いリンク:現在のミリ秒を取得するには?

于 2012-06-02T01:54:44.507 に答える