When using functions from addon blocks the main process node js?
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 25/100
Direção de pesquisa
Start with the readDataSerial N-API wrapper shown in the issue and trace the blocking Ibox_Controller_ReadData call. Review the Node.js addon guidance for asynchronous work, then determine how the result is delivered without blocking the main process. Done means the long-running read no longer prevents the Node.js main thread from processing other work.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Implemented a wrapper for the function using N-API. It works, but the problem is that when it works the main thread of the node does not work? How can I rewrite this function so that it does not block the main thread? What do I need to use async, callback, thread for this?
napi_value readDataSerial(napi_env env, napi_callback_info info) {
napi_status status;
size_t argc = 1;
napi_value args[1], object;
napi_value id, data;
status = napi_get_cb_info(env, info, &argc, args, NULL, NULL);
assert(status == napi_ok);
if (argc < 1) {
napi_throw_type_error(env, NULL, "Wrong number of arguments");
return NULL;
}
//....
Ibox_ReadData *context = calloc(1, sizeof(Ibox_Context));
//this function takes a long time and blocks the main process
Ibox_Result_Submit *submitResult = Ibox_Controller_ReadData(context);
status = napi_create_object(env, &object);
status = napi_create_string_utf8(env, submitResult->id, NAPI_AUTO_LENGTH, &id);
status = napi_set_named_property(env, object, "id", id);
status = napi_create_string_utf8(env, submitResult->date, NAPI_AUTO_LENGTH, &date);
status = napi_set_named_property(env, object, "data", data);
assert(status == napi_ok);
return object;
})
- Linguagem predominante
- C++
- Estrelas
- 2.6k
- Forks
- 602
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de nodejs/node-addon-examples
-
Create Valgrind run of tests Abertaenhancement
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 38/100
nodejs/node-addon-examples#585 · 1 reação ·
-
Add .d.ts files in samples. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 38/100
nodejs/node-addon-examples#530 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
nodejs/node-addon-examples#445 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 32/100
nodejs/node-addon-examples#444 · 1 comentário ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
nodejs/node-addon-examples#381 ·
Todas as issues de nodejs/node-addon-examples
Issues semelhantes
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 92/100
autowarefoundation/autoware_universe#13413 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
-
automated-analysis bug memory-safety
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 86/100
-
Sensor initialization takes very long when `--initial-sim-time` is set to current UNIX timestamp Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
gazebosim/gz-sensors#662 · 1 comentário ·