1 Aralık 2010, ÇARŞAMBA
Nasıl bitirmek için zaman uyumsuz olarak gönderilir bloğu mi bekleyeyim?
İşleme Grand Central kullanarak zaman uyumsuz Gönderme yapan bir kod deniyorum. Test kodu bu gibi görünüyor:
[object runSomeLongOperationAndDo:^{
STAssert…
}];
Test işlemi için beklemek bitirmek zorunda. Benim geçerli çözüm bu gibi görünüyor:
__block BOOL finished = NO;
[object runSomeLongOperationAndDo:^{
STAssert…
finished = YES;
}];
while (!finished);
Biraz kaba görünüyor, daha iyi bir yol biliyor musunuz? Sıra ortaya çıkarmak ve sonra da dispatch_sync
çağırarak blok olabilir:
[object runSomeLongOperationAndDo:^{
STAssert…
}];
dispatch_sync(object.queue, ^{});
...ama belki de çok fazla object
üzerinde teşhir.
CEVAP
1 Aralık 2010, ÇARŞAMBA
dispatch_sempahore
kullanarak çalışıyor. Bu gibi görünmelidir:
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
[object runSomeLongOperationAndDo:^{
STAssert…
dispatch_semaphore_signal(sema);
}];
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);
Bu ise runSomeLongOperationAndDo:
işlem aslında bir iş parçacığı hak etmek için yeterince uzun değil karar verirse bile doğru şekilde davranır ve yerine eşzamanlı olarak çalışır.
Bunu Paylaş:
Nasıl dosyaları zaman uyumsuz olarak y...
Hükümdar her zaman Yüce metin olarak g...
Zaman uyumsuz olarak Görev<T> za...
Nasıl Node.js zaman uyumsuz fonksiyonl...
Eşzamanlı olarak zaman uyumsuz bir işl...