2015-10-26 4 views
1

Я создаю аддон 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, но есть утечка памяти, если я продолжу этот ход, использование памяти продолжает расти. Но я не нашел другого способа сделать это. Поэтому я был бы признателен за любую помощь, если у кого-то есть идея.

+0

Я тоже пробовал использовать NAN (это [код] (https://gist.github.com/oferh/bdde17c52f5bc97fdd42)) @ antirreni91 Какую версию узла вы проверили? –

+0

открыл проблему с узлом [# 3560] (https://github.com/nodejs/node/issues/3560) –

+0

обновлен код [gist] (https://gist.github.com/oferh/bdde17c52f5bc97fdd42) для запуска несколько раз, вероятно, проблема заключается в том, что вы выделяете память в свой код, не отпуская ее. –

ответ

0

Я нашел решение! По-видимому, рабочий освобождает память сам по себе после выполнения задания, поэтому я могу продолжать делать это таким образом. Утечка памяти была ошибкой моего кода, поскольку я выделял память и не отпускал ее где-то еще (полностью скрытый, я ее не видел), но теперь она решена.

Спасибо!

Смежные вопросы