SystemTimers в Задаче C - PullRequest
       4

SystemTimers в Задаче C

0 голосов
/ 14 мая 2011

Мне нужно найти разницу между количеством последних тиков и текущим количеством тиков, но он печатает одно и то же значение каждый раз. Здесь значение таймера не меняется. Что-то не так с кодом ниже?

SystemTimer.m:

#import "SystemTimers.h"


@implementation SystemTimers

-(id)init
{
    if (self=[super init]) {
        [self Reset];
    }
    return self;
}
+(unsigned long)GetTickCount
{
      return (unsigned long)[NSNumber numberWithLong:[[NSDate date] timeIntervalSince1970] * 1000];
    // NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate]*1000;
    //return (unsigned long)now;
}
-(unsigned long)Get:(BOOL)bUpdate
{
    unsigned long dwTickCount = [SystemTimers GetTickCount];
    NSLog(@"dwTickCount:%0.0f",dwTickCount);

    if ( bUpdate )
    {
        if ( dwTickCount < m_dwLastTickCount )
        {  
            m_dwTimer += (dwTickCount - m_dwLastTickCount) + ((unsigned long int)-1);
        }
        else
        {   
            m_dwTimer += dwTickCount - m_dwLastTickCount;
        }
        NSLog(@"m_dwTickCount:%0.0f  m_dwTimer:%0.0f",m_dwLastTickCount,m_dwTimer);

        m_dwLastTickCount = dwTickCount;
    }
    NSLog(@"m_dwTickCount:%0.0f  m_dwTimer:%0.0f",m_dwLastTickCount,m_dwTimer);
    return m_dwTimer;

}
-(void)Reset
{
    m_dwLastTickCount = [SystemTimers GetTickCount];
    m_dwTimer = 0;
}

@end

SystemTimer.h:

#import <Foundation/Foundation.h>


@interface SystemTimers : NSObject {
 @private
    unsigned long int m_dwLastTickCount;
    unsigned long int m_dwTimer;
}

-(id)init;
+(unsigned long)GetTickCount;
-(unsigned long)Get:(BOOL)bUpdate;
-(void)Reset;

@end

main.m:

#import <Foundation/Foundation.h>
#import "SystemTimers.h"
int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    SystemTimers* timers = [[SystemTimers alloc]init];
    [timers Get:true];
    //[timers Reset];
    [pool drain];
    return 0;
}

Выход:

2011-05-15 09:53:19.422 SystemTimer[341:a0f] dwTickCount:1100976
2011-05-15 09:53:19.424 SystemTimer[341:a0f] m_dwTickCount:1100976  m_dwTimer:1104

2011-05-15 09:53:19.422 SystemTimer[341:a0f] dwTickCount:1100976
2011-05-15 09:53:19.424 SystemTimer[341:a0f] m_dwTickCount:1100976  m_dwTimer:1104

2011-05-15 09:53:19.422 SystemTimer[341:a0f] dwTickCount:1100976
2011-05-15 09:53:19.424 SystemTimer[341:a0f] m_dwTickCount:1100976  m_dwTimer:1104

Я надеюсь, что он печатает адрес каждый раз, а не число тиков. Почему это происходит?

1 Ответ

1 голос
/ 15 мая 2011

Вы делаете неправильную типизацию в GetTickCount. Вы вписываете объект NSNumber в unsigned long. Если вам нужны миллисекунды с 1970 года, вместо этого просто введите значение NSTimeInterval, возвращаемое timeIntervalSince1970:

+(unsigned long)GetTickCount
{
    return (unsigned long)([[NSDate date] timeIntervalSince1970] * 1000.0);
}

При вызовах NSLog не используйте% f для длинных целых чисел. Вместо этого используйте% ld:

NSLog(@"dwTickCount:%ld", dwTickCount);

Я не совсем уверен, что вы пытаетесь сделать в Get, но, надеюсь, это выведет вас на правильный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...