[英]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.