0
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
while(!weakSelf.isAnotherThreadCompleted && [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]])
;
[weakSelf doSomething];
});
將異步線程以這種方式等待另一個線程是否正確?GCD和線程等待
感謝您的詳細解答,我只是想明白這樣做是否正確。但我不明白爲什麼currentRunLoop會立即返回?現在它按照你說的那樣工作,這就是爲什麼我打開這個話題。 – taffarel 2013-03-21 12:14:09
查看文檔' - runMode:beforeDate:',如果沒有連接到運行循環的輸入源或計時器,它將立即返回。就你而言,你可能創建了一個新的運行循環,所以它沒有任何附加。另外,當你使用'dispatch_async'時,你不能控制代碼運行的線程,這是OS和GCD的業務。運行循環是線程特定的,因此您不應該在GCD調用中使用它們(除非您在主隊列中,這是唯一保證位於特定線程上的主線程)。 – Guillaume 2013-03-21 12:23:06