设置 dispatch_group 的等待时间
setting wait time on dispatch_group
我正在尝试设置调度组的等待时间,但除非我设置 'DISPATCH_TIME_FOREVER',否则等待时间将被忽略。
如果我想将等待时间设置为 5 秒,我该如何实现?或者我是否需要更改为信号量并在该对象上设置超时?
示例代码:
dispatch_group_enter(group)
async(handler: handler)
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
我所要做的就是用数字(例如 5 秒)替换 DISPATCH_TIME_FOREVER。
就是这样。等待将忽略任何数字(例如 5、5 * NSEC_PER_SEC、Int64(number)、UInt64(number))或其他排列。
我希望,这个例子是'self explanatory'。看,超时是怎么定义的!
import Foundation
let group = dispatch_group_create()
let queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL)
dispatch_async(queue) { () -> Void in
dispatch_group_enter(group)
var i = 0
while i < 15 {
print(i)
i++
usleep(500000)
}
dispatch_group_leave(group)
}
//dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
let t = dispatch_time( DISPATCH_TIME_NOW, 5000000000)
dispatch_group_wait(group, t)
print("stop")
/* prints
0
1
2
3
4
5
6
7
8
9
stop
*/
Declaration dispatch_time_t dispatch_time( dispatch_time_t when,
int64_t delta); Parameters when The dispatch_time_t value to use as
the basis for a new value. Pass DISPATCH_TIME_NOW to create a new time
value relative to now. delta The number of nanoseconds to add to the
time in the when parameter. Return Value A new dispatch_time_t.
Discussion The default clock is based on mach_absolute_time.
您可以使用具有相同功能的简化版本
import Foundation
let group = dispatch_group_create()
let queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL)
dispatch_group_async(group, queue) { () -> Void in
var i = 0
while i < 15 {
print(i)
i++
usleep(500000) // 0.5 sec delay
}
}
// wait time a little bit more than 1 second
let t = dispatch_time( DISPATCH_TIME_NOW, 1100000000)
dispatch_group_wait(group, t)
print("stop")
/* prints
0
1
2
stop
*/
和
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
相同的代码打印所有 15 个数字 (0...14)
我正在尝试设置调度组的等待时间,但除非我设置 'DISPATCH_TIME_FOREVER',否则等待时间将被忽略。
如果我想将等待时间设置为 5 秒,我该如何实现?或者我是否需要更改为信号量并在该对象上设置超时?
示例代码:
dispatch_group_enter(group)
async(handler: handler)
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
我所要做的就是用数字(例如 5 秒)替换 DISPATCH_TIME_FOREVER。
就是这样。等待将忽略任何数字(例如 5、5 * NSEC_PER_SEC、Int64(number)、UInt64(number))或其他排列。
我希望,这个例子是'self explanatory'。看,超时是怎么定义的!
import Foundation
let group = dispatch_group_create()
let queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL)
dispatch_async(queue) { () -> Void in
dispatch_group_enter(group)
var i = 0
while i < 15 {
print(i)
i++
usleep(500000)
}
dispatch_group_leave(group)
}
//dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
let t = dispatch_time( DISPATCH_TIME_NOW, 5000000000)
dispatch_group_wait(group, t)
print("stop")
/* prints
0
1
2
3
4
5
6
7
8
9
stop
*/
Declaration dispatch_time_t dispatch_time( dispatch_time_t when, int64_t delta); Parameters when The dispatch_time_t value to use as the basis for a new value. Pass DISPATCH_TIME_NOW to create a new time value relative to now. delta The number of nanoseconds to add to the time in the when parameter. Return Value A new dispatch_time_t.
Discussion The default clock is based on mach_absolute_time.
您可以使用具有相同功能的简化版本
import Foundation
let group = dispatch_group_create()
let queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL)
dispatch_group_async(group, queue) { () -> Void in
var i = 0
while i < 15 {
print(i)
i++
usleep(500000) // 0.5 sec delay
}
}
// wait time a little bit more than 1 second
let t = dispatch_time( DISPATCH_TIME_NOW, 1100000000)
dispatch_group_wait(group, t)
print("stop")
/* prints
0
1
2
stop
*/
和
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
相同的代码打印所有 15 个数字 (0...14)