he estado escribiendo un código que reemplaza algunas existente: código de lectura¿Cuál es la diferencia entre GCD Despatch Sources y select()?
while(runEventLoop){
if(select(openSockets, readFDS, writeFDS, errFDS, timeout) > 0){
// check file descriptors for activity and dispatch events based on same
}
}
zócalo. Me gustaría cambiar esto para usar una cola GCD, de modo que pueda mostrar eventos en la cola usando dispatch_async en lugar de mantener una matriz "debe llamarse en la próxima iteración". También estoy usando una cola de GCD para/contener/esta acción en particular, por lo tanto, quiero delegarla a un formulario de envío de GCD más natural. (No un tiempo() bucle monopolizar una cola de serie)
Sin embargo, cuando intenté refactorizar esta en una forma que se basó en fuentes de despacho despedido de controladores de eventos vinculados a DISPATCH_SOURCE_TYPE_READ y DISPATCH_SOURCE_TYPE_WRITE en los descriptores de socket, el código de la biblioteca que Depende de esta programación dejó de funcionar. Mi primera suposición es que estoy malinterpretando el uso de DISPATCH_SOURCE_TYPE_READ y DISPATCH_SOURCE_TYPE_WRITE - Supuse que producirían aproximadamente el mismo comportamiento que llamar a select() con esos descriptores de socket.
¿Entiendo mal las fuentes de envío de GCD? O, respecto al refactor, ¿lo estoy usando en una situación en la que no es el más adecuado?
Debería mostrar su código: lo que intentó. Mientras tanto, Mike Ash tiene un código de muestra para comprobar - http://www.mikeash.com/svn/GCDWeb/GCDWeb.m - servidor web GCD. – robertvojta