【问题标题】:"Throttle" a queue of instructions using Grand Central Dispatch使用 Grand Central Dispatch 来“限制”指令队列
【发布时间】:2015-11-25 03:43:45
【问题描述】:

我 99% 确定使用 GCD 可以实现这样的事情,但我对 GCD 不太熟悉,也不确定如何正确提问,所以这里是:

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

谢谢!

【问题讨论】:

    标签: ios c queue grand-central-dispatch


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 2014-02-07
      • 2011-07-28
      • 2023-03-25
      相关资源
      最近更新 更多