Pisałem jakiś kod, który zastępuje niektóre istniejące:Jaka jest różnica między źródłami wysyłania GCD i select()?
while(runEventLoop){
if(select(openSockets, readFDS, writeFDS, errFDS, timeout) > 0){
// check file descriptors for activity and dispatch events based on same
}
}
gniazdo odczyt kodów. Chciałbym to zmienić, aby użyć kolejki GCD, tak aby móc umieszczać zdarzenia w kolejce przy użyciu metody dispatch_async, zamiast utrzymywać tablicę "musi być wywołana przy następnej iteracji". Używam również kolejki GCD do/zawierającej/tę konkretną akcję, dlatego chcę przekazać ją bardziej naturalnej formie wysyłkowej GCD. (Nie pętli while() monopolizacyjnego kolejkę szeregowej)
Jednak, kiedy próbuje byłaby to w formie oparła się na źródłach wysyłkowych zwolniony z obsługi zdarzeń związanych z DISPATCH_SOURCE_TYPE_READ i DISPATCH_SOURCE_TYPE_WRITE na deskryptorach portami kodu biblioteki, które w zależności od tego harmonogramu przestał działać. Moje pierwsze założenie jest takie, że nieporozumienie przy korzystaniu z DISPATCH_SOURCE_TYPE_READ i DISPATCH_SOURCE_TYPE_WRITE - założyłem, że przyniosą one mniej więcej takie samo zachowanie, jak wywoływanie select() z tymi deskryptorami gniazd.
Czy źle rozumiem źródła wysyłki GCD? Lub, jeśli chodzi o refaktor, czy używam go w sytuacji, w której nie jest najlepiej dopasowany?
Powinieneś pokazać swój kod - co wypróbowałeś. W międzyczasie Mike Ash ma pewien przykładowy kod do sprawdzenia - http://www.mikeash.com/svn/GCDWeb/GCDWeb.m - serwer WWW GCD. – robertvojta