J’essaie de créer un très petit exemple d’adjonctions nodejs. Mon code c ++ est le suivant:
void __sleep(uv_work_t* req) { usleep(1000 * 1000 * 5); // = 5seconds } void after(uv_work_t *handle, int status) { printf("After\n"); } Handle foo(const Arguments& args) { HandleScope scope; uv_loop_t *loop = uv_default_loop(); uv_work_t req; uv_queue_work(loop, &req, __sleep, after); return scope.Close(Undefined()); } void InitAll(Handle exports, Handle module) { NODE_SET_METHOD(exports, "foo", foo); } NODE_MODULE("myModule", InitAll)
En js, ceci:
console.log(myModule); myModule.foo(); console.log("started sleeping...");
Lorsque j’appelle la fonction myModule.foo
, le processus se termine par une erreur de segmentation.
J’ai essayé d’append uv_run(loop, UV_RUN_DEFAULT)
mais cela bloque le thread principal.
Où me suis-je trompé? Merci
Le problème est que req
est alloué sur la stack et est libéré lorsque foo
revient. Vous devez l’allouer sur le tas (en utilisant new
ou malloc
) et le libérer manuellement lorsque vous avez terminé (par exemple, after
rappel).