2016-01-17 2 views
0

Я пытаюсь установить время ожидания в группе отправки, но если я не установил 'DISPATCH_TIME_FOREVER', время ожидания будет проигнорировано.установка времени ожидания на dispatch_group

Если бы я хотел установить ожидание до 5 секунд, как мне это достичь? Или мне нужно перейти на семафор и поставить тайм-аут на этот объект?

пример кода:

dispatch_group_enter(group) 

async(handler: handler) 

dispatch_group_wait(group, DISPATCH_TIME_FOREVER) 

Все я после должен заменить DISPATCH_TIME_FOREVER с числом (например, 5 секунд).

Это все. Ожидание игнорируется любым числом (например, 5, 5 * NSEC_PER_SEC, Int64 (число), UInt64 (число)) или другой перестановкой.

+0

пожалуйста, поставить вот некоторые строки кода, что вы сделали, что вы ожидали и что было сделано вашим кодом :-). это может помочь нам понять ваши потребности ... – user3441734

+0

ОК, «... время ожидания игнорируется», означает, что он немедленно возвращается? – user3441734

+0

Да. Это то, что я имел в виду. Код возвращается немедленно. – goggelj

ответ

2

Надеюсь, этот пример «сам по себе». см., как определяется тайм-аут!

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 
*/ 

Декларация dispatch_time_t dispatch_time (dispatch_time_t, когда, int64_t дельта); Параметры, когда значение dispatch_time_t используется как - основание для нового значения. Перейдите в DISPATCH_TIME_NOW, чтобы создать новое значение времени относительно текущего времени. delta Количество наносекунд, чтобы добавить к времени в параметре when. Возвращаемое значение Новый dispatch_time_t.

Обсуждение Часы по умолчанию основаны на 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)

Смежные вопросы