将dispatch_time与浮点值一起使用

时间:2015-04-18 11:14:39

标签: ios objective-c floating-point delay grand-central-dispatch

我有一个简单的iOS应用程序,需要在运行之前延迟某段代码。

我正在使用dispatch_time方法来实现这一点并且它非常好用。但是只有一个问题,dispatch_time接受一个整数,所以你可以设置的时间只允许是整数,如1.0秒或3.0秒等等。

我想将其设置为延迟0.5秒。我怎样才能做到这一点?以下是我的代码:

    int64_t time_delay = 1.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, time_delay * NSEC_PER_SEC);

    dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {
        /*
           my block of code....
        */
    });

3 个答案:

答案 0 :(得分:2)

请勿使用int64_t,而应使用CGFloat。它会正常工作。

CGFloat time_delay = 0.5f;

答案 1 :(得分:1)

dispatch_time()需要纳秒作为第二个参数。从第二个参数中删除NSEC_PER_SEC,延迟将以纳秒为单位

答案 2 :(得分:0)

    double delay = 2.25;

    // 2250000000 = 2.25 * 1000000000
    dispatch_time_t offset_time = delay * NSEC_PER_SEC;

    // current mach_absolute_time + offset
    dispatch_time_t fire_time = dispatch_time(DISPATCH_TIME_NOW, offset_time);

    // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2.25), dispatch_get_main_queue(), ^{
    dispatch_after(fire_time, dispatch_get_main_queue(), ^{
        NSLog(@"time %llu", t);
    });