使用Grand Central Dispatch“{Throttle”一系列指令

时间:2015-11-25 03:43:45

标签: ios c queue grand-central-dispatch

我99%肯定GCD可以做到这一点,但是我对GCD并不太熟悉,我不确定如何正确地提出这个问题,所以这里有:

我正在尝试创建一个一个一个地执行的FIFO指令队列,每个指令执行之间有一个延迟X.指令也需要在主线程上执行。我假设我需要使用dispatch_async创建一个串行队列和dispatch_get_main_queue()每个指令,但我不确定如何合并延迟。

谢谢!

1 个答案:

答案 0 :(得分:1)

您几乎肯定不想使用dispatch_get_main_queue()。您应该根据自己的需要创建自己的串行队列,而不是使用主队列:

dispatch_queue_t my_queue = dispatch_queue_create("com.mycompany.myapp.description", DISPATCH_QUEUE_SERIAL);

鉴于您正在从FIFO读取指令,我建议您使用以下方式使用调度I / O:

int fd = open(...);

dispatch_io_handler_t stream_handler = ^(bool done, dispatch_data_t data, int error) {
   ...
}

void (^stream_cleanup_handler)(int error) = ^(int error) {
    close(fd);
};

dispatch_io_t stream = dispatch_io_create(DISPATCH_IO_STREAM, fd, my_queue, stream_cleanup_handler);

dispatch_io_read(stream, 0, SIZE_MAX, my_queue, stream_handler);