Objetos distribuidos de cacao, sondeo largo, lanzamiento y & # 8220; Sin respuesta & # 8221; en Monitor de actividad

StackOverflow https://stackoverflow.com/questions/1044039

Pregunta

Escenario:

Tengo un IPC basado en objetos distribuidos entre una aplicación mac y un demonio launchd (escrito con clases Foundation). Dado que tuve problemas antes con respecto a la mensajería asincrónica (por ejemplo, tengo un registerClient: en el objeto raíz del servidor y cada vez que hay un evento, el objeto raíz del servidor notifica / llama a un método en el objeto proxy del cliente), hice un sondeo largo que significaba que el cliente " cosechas " listas de eventos / notificaciones del demonio. Esta " cosecha " se realiza a través de una llamada al método de objeto del servidor, que luego devuelve una instancia de NSArray.

Funciona bastante bien, hasta que durante unos segundos, el proceso del objeto del servidor (lanzado a través de launchd) comienza a etiquetarse en rojo con el " (No responde) " etiqueta al lado (dentro del Monitor de actividad). Como dije, funcionalmente funciona bien, pero solo queremos deshacernos de esto "No responde" etiqueta.

¿Cómo puedo evitar esto? "No responde" etiqueta?

Para su información, ya hice procesos basados ??en launchd antes y esta es la primera vez que hice encuestas largas. Además, probé las conexiones basadas en NSSocketPortNameServer y también las basadas en NSSocketPort. No tuvieron este problema. El bloqueo no fue también un problema porque los bloqueos utilizados eran solo de NSCondition y registramos y depuramos el programa y parece ser el único problema de bloqueo. está en la parte de cosecha, que en realidad funciona funcionalmente. Además, el proceso del cliente se escribe en PyObjC mientras que el proceso del servidor se escribió usando ObjC.

Gracias de antemano.

¿Fue útil?

Solución 3

Mi problema fue en realidad la llamada para obtener el PID de un proceso usando la firma FNDR ... esa parte causó el " No responde " error y nunca fueron las cerraduras o la parte de sondeo largo. Perdón por esto chicos. Pero gracias a Dios ya encontré la respuesta.

Otros consejos

Muestra el proceso para encontrar fuera de lo que está haciendo o esperando.

Peter tiene razón en el enfoque, aunque es posible que pueda resolverlo mediante una simple inspección. " No responde " significa que no está procesando eventos en su cola de eventos durante al menos 5 segundos (solía ser 2 segundos, pero lo aumentaron en 10.4). Para un proceso de IU, esto crearía un cursor de espera giratorio, pero para un proceso que no sea de IU, no verá los efectos tan fácilmente.

Si este es un programa basado en runloop, significa que probablemente esté haciendo algo con una operación de bloqueo (síncrono) que debería hacerse con el ciclo de ejecución y una devolución de llamada (asíncrona). Alternativamente, necesita un segundo hilo para procesar sus operaciones de bloqueo para que su hilo principal pueda continuar respondiendo a los eventos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top