使用带有浮点值的 dispatch_time
Use dispatch_time with a float value
我有一个简单的 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....
*/
});
不要使用 int64_t
,而是使用 CGFloat
。它将正常工作。
CGFloat time_delay = 0.5f;
dispatch_time() 将纳秒作为第二个参数。从第二个参数中删除 NSEC_PER_SEC,您的延迟将以纳秒为单位
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);
});
我有一个简单的 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....
*/
});
不要使用 int64_t
,而是使用 CGFloat
。它将正常工作。
CGFloat time_delay = 0.5f;
dispatch_time() 将纳秒作为第二个参数。从第二个参数中删除 NSEC_PER_SEC,您的延迟将以纳秒为单位
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);
});