UIApplicationSignificantTimeChangeNotification,NSSystemClockDidChangeNotification这两个通知都试过了,时间变化时没有调用(单位是分)。在线急等,谢谢

解决方案 »

  1.   

    用runloop写吧,最好在需要的界面开线程启用runloop,要不然就是定时器无限检测了
      

  2.   

    我用定时器试了下,时间间隔是5秒,不过不太及时。太频繁又怕性能上不好,有没有好一点的方法?你说的runloop能不能给个大体的代码
      

  3.   

    你去网上搜吧,很多的,但是runloop同样需要for循环和do,while驱动。
      

  4.   

    dispatch_source_t试过么?是否满足需求?
      

  5.   


    - (void) myTimer
    {
        uint64_t u64Time      = 0;
        unsigned int uiSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
        fd_set fdread;
        timeval seltime;
        seltime.tv_sec = 0;
        seltime.tv_usec = 100;
        
        
        uint64_t u64BeginTime   = 0;
        uint64_t u64CurTime     = 0;    for ( ; m_bRunTimer; )
        {
            NSDate* date         = [NSDate dateWithTimeIntervalSinceNow:0];
            NSTimeInterval ti    = [date timeIntervalSince1970] * 1000;
            if ( !u64BeginTime )
            {
                u64BeginTime = ti;
            }
            u64CurTime = ti;        FD_ZERO(&fdread);
            FD_SET(uiSocket, &fdread);
            select(uiSocket + 1, &fdread, NULL, NULL, &seltime);        u64Time = u64CurTime - u64BeginTime;
            
            uint64_t u64Hour    = u64Time / ( 1000 * 60 * 60 );
            uint64_t u64Minute  = u64Time / ( 1000 * 60 ) % 60;
            uint64_t u64Second  = u64Time / 1000 % 60;
            uint64_t u64Msec    = u64Time % 1000;
            
            NSString *strTime   = [ [NSString alloc] initWithFormat:@"%02llu:%02llu:%02llu.%03llu", u64Hour, u64Minute, u64Second, u64Msec];
            
            dispatch_async(dispatch_get_main_queue(), ^{
                self.m_tfTime.stringValue     = strTime;
                self.m_tfTimeMSec.stringValue = [[NSString alloc] initWithFormat:@"%010llu", u64Time ];
            });
        }
    }
    需要什么时间级别的,,修改这个
        timeval seltime;
        seltime.tv_sec = 0;
        seltime.tv_usec = 100;的值即可。