1
我99%確定GCD可以這樣做,但我對GCD不太熟悉,我不確定如何正確提出問題,所以這裏去:使用Grand Central Dispatch「Throttle」指令隊列
我想創建一個指令的FIFO隊列,一次執行一個,每個執行之間有一個延遲X.該指令還需要在主線程上執行。我假設我需要創建一個串行隊列並使用每條指令與dispatch_get_main_queue()
,但我不知道如何合併延遲。
謝謝!
我99%確定GCD可以這樣做,但我對GCD不太熟悉,我不確定如何正確提出問題,所以這裏去:使用Grand Central Dispatch「Throttle」指令隊列
我想創建一個指令的FIFO隊列,一次執行一個,每個執行之間有一個延遲X.該指令還需要在主線程上執行。我假設我需要創建一個串行隊列並使用每條指令與dispatch_get_main_queue()
,但我不知道如何合併延遲。
謝謝!
你幾乎肯定不想使用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);