Я создаю аддон C++ для узла. И я хотел бы запустить uv_queue_work несколько раз, не спать основной поток. Любая идея, как это сделать?Как я могу использовать uv_queue_work несколько раз?
До сих пор я сделал это:
void main(const FunctionCallbackInfo<Value>& args) {
//here goes my main code
//Here I schedule the worker, to run BEFOREmethod in a new thread, and AFTERmethod in the main thread
uv_queue_work(uv_default_loop(), req, BEFOREmethod,(uv_after_work_cb) AFTERmethod);
return callback;
}
void BEFOREmethod(uv_work_t* req){
//here goes the code that runs in new thread
usleep(200000);
}
void AFTERmethod(uv_work_t* req, int status){
//here goes the code that runs in main thread
//Then we schedule the uv_queue_work again
uv_queue_work(uv_default_loop(), req, BEFOREmethod,(uv_after_work_cb) AFTERmethod);
}
Так это работает, я могу повторно запланировать uv_queue_work, но есть утечка памяти, если я продолжу этот ход, использование памяти продолжает расти. Но я не нашел другого способа сделать это. Поэтому я был бы признателен за любую помощь, если у кого-то есть идея.
Я тоже пробовал использовать NAN (это [код] (https://gist.github.com/oferh/bdde17c52f5bc97fdd42)) @ antirreni91 Какую версию узла вы проверили? –
открыл проблему с узлом [# 3560] (https://github.com/nodejs/node/issues/3560) –
обновлен код [gist] (https://gist.github.com/oferh/bdde17c52f5bc97fdd42) для запуска несколько раз, вероятно, проблема заключается в том, что вы выделяете память в свой код, не отпуская ее. –