2012-07-09 21 views
5

Estoy creando un nodo complemento C++ que se supone que devuelve la llamada a una función js ya que los eventos son activados por algún otro hilo que no está bajo mi control (en realidad es .NET hilo de un dll administrado que uso). Como el mundo JS es de un solo hilo, no puedo simplemente mantener la referencia de la función js y llamarla desde ese hilo que no sea js. Ni siquiera puedo crear los parámetros que quiero pasar a esa función de devolución de llamada en ese hilo.Complemento Node.js C++: múltiples devoluciones de llamada desde diferente hilo

He visto que uv_queue_work se usa en los casos en los que desea mover el trabajo fuera del subproceso js y una vez terminado, recibe una llamada del subproceso js para hacer lo que necesite hacer, como p. volver a llamar una función js.

Para su posterior consulta, aquí está la firma de esa función:

int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, 
uv_after_work_cb after_work_cb); 

Calling uv_queue_work está muy bien para trabajos puntuales, y que probablemente podría conseguir que me llaman de manera arbitraria a menudo por el encadenamiento de llamadas a uv_queue_work de after_work_cb, mientras work_cb se sincroniza con ese otro hilo, pero me pregunto si no hay una manera más directa de hacerlo.

Como un fn proporcionado por node.js que podría ser llamado directamente por cualquier otro hilo con un puntero fn que apunta al código que se ejecutará en el hilo principal de js en la próxima ocasión. ¿Alguna idea?

Respuesta

7

En lugar de utilizar uv_queue_work, debe consultar las funciones uv_async_ * (Consulte https://github.com/joyent/libuv/blob/master/include/uv.h).

Una implementación muy buena de esto se puede encontrar en el proyecto sqlite del nodo https://github.com/developmentseed/node-sqlite3/blob/master/src/async.h.

Sólo una nota sin embargo, si no está extremadamente cuidado con estas cosas, que va a terminar con algunos errores cuenta de referencia bucle terrible (aplicación se cierra a principios de, o en absoluto)

+0

de Spot ¡en! Exactamente lo que necesito –

Cuestiones relacionadas