14 #include "../PdfController.h"
26 std::list<void *> intermediate;
34 static void handleIntermediate(uv_async_t *handle) {
39 uv_mutex_lock(&self->mutex);
40 if(self->intermediate.empty()) {
41 uv_mutex_unlock(&self->mutex);
44 data =
self->intermediate.front();
45 self->intermediate.pop_front();
46 uv_mutex_unlock(&self->mutex);
48 self->HandleIntermediate(data);
58 static void deleteAsync(uv_handle_t* handle) {
61 delete (uv_async_t *)handle;
65 PdfWorker(T *controller, NanCallback *callback) : NanAsyncWorker(callback) {
66 _controller = controller;
69 uv_loop_t *loop = uv_default_loop();
70 this->async =
new uv_async_t;
71 uv_async_init(loop, this->async, reinterpret_cast<uv_async_cb>(handleIntermediate));
72 this->async->data =
this;
73 uv_mutex_init(&mutex);
78 if(this->callback == NULL)
80 uv_close((uv_handle_t*)this->async, deleteAsync);
81 uv_mutex_destroy(&this->mutex);
89 void CallIntermediate(
void *data) {
90 uv_mutex_lock(&this->mutex);
91 intermediate.push_back(data);
92 uv_mutex_unlock(&this->mutex);
95 virtual void HandleIntermediate(
void *data) {}
Base class for defining background processes.
Definition: PdfWorker.h:21