LINUX.ORG.RU

История изменений

Исправление asaw, (текущая версия) :

Ну, в принципе, в 4-й части описывается хоть и не совсем то, но близко: https://blog.scottfrees.com/c-processing-from-node-js-part-4-asynchronous-addons

О кривизне решения можно судить уже по вот этой конструкции:

struct Work {
  uv_work_t  request;
  Persistent<Function> callback;

  std::vector<location> locations;
  std::vector<rain_result> results;
};

и тому, как она потом используется:

    // kick of the worker thread
    uv_queue_work(uv_default_loop(),&work->request,
        WorkAsync,WorkAsyncComplete);
В NAN есть обертка вокруг всего этого, которая придаёт решению более человеческий вид: https://github.com/nodejs/nan/blob/master/doc/asyncworker.md#api_nan_async_wo... Но основную проблему перекидывания данных между потоками это, к сожалению, не решает... Видимо, придется с ней жить.

Исходная версия asaw, :

Ну, в принципе, в 4-й части описывается хоть и не совсем то, но близко: https://blog.scottfrees.com/c-processing-from-node-js-part-4-asynchronous-addons

О кривизне решения можно судить уже по вот этой конструкции:

struct Work {
  uv_work_t  request;
  Persistent<Function> callback;

  std::vector<location> locations;
  std::vector<rain_result> results;
};

и тому, как она потом используется:

    // kick of the worker thread
    uv_queue_work(uv_default_loop(),&work->request,
        WorkAsync,WorkAsyncComplete);
В принципе, в NAN есть обертка вокруг всего этого, которая придаёт решению более человеческий вид: https://github.com/nodejs/nan/blob/master/doc/asyncworker.md#api_nan_async_wo... Но основную проблему перекидывания данных между потоками это, к сожалению, не решает... Видимо, придется с ней жить.