2016-06-07 76 views
0

我創建了一個AsyncProgressWorker它創建一個實例並通過一個接口在我的C++ DLL中調用構造函數。 init創建一個永久工作的線程。逝去的罰款,到目前爲止...NAN - AsyncProgressWorker已損壞成員

這是我nodeModul.cc

MyModule mod* = 0;  

NAN_METHOD(init) { 
    Nan::HandleScope scope; 

    ... doing stuff with the arguments 

    // create instance 
    mod = new MyModule(nanCallback, p1, p2, p3); 

    // queue the worker instance onto the thread-pool 
    Nan::AsyncQueueWorker(mod); 
} 

NAN_METHOD(setIntSetting) { 
    Nan::HandleScope scope; 

    if (mod) {   
    ... do the argument thing 

    mod->setIntSetting(p, v, r); 
    } 
    else { ... } 
} 

我已經添加了一些功能調用接口的方法。我想從現在開始轉發正在運行的DLL線程應該使用的數據。

請找我MyModule.h

class MyModule : public Nan::AsyncProgressWorker { 
public: 
    // Constructor 
    SubvisMocker(Nan::Callback *callback, const long p1, const long p2, const long p3) : Nan::AsyncProgressWorker(callback) 
    , p1_(p1), p2_(p2), p3_(p3) 
{ 
    myMod = nullptr; 

    std::cout << "members: " << p1_ << "/" << p2_ << "/" << p3_ << std::endl; 

} 
// Destructor 
~MyModule() {} 

// Execute 
void Execute(const Nan::AsyncProgressWorker::ExecutionProgress &progress) { 

    if (!myMod) { 
     myMod = new ns::Dll_Object(); 

     myMod->init(p1_, p2_); 
    }    
    Sleep(200); 
} 

void HandleProgressCallback() { 
    std::cout << "ProgressCallback() - was called" << std::endl; 
} 

// Execution completed 
void HandleOKCallback() { 
    Nan::HandleScope scope; 
    callback->Call(0, NULL); 
} 

// 
// set method 
void setIntSetting(const int p, const int v, const int r) { 
    Nan::HandleScope scope; 
    std::cout << "members: " << p1_ << "/" << p2_ << "/" << p3_ << std::endl; 
    myMod->intSetting(p, v, r); 
} 
private: 
    long p1_; 
    long p2_; 
    long p3_; 

    ns::IDllObject* myMod; 

};

在AsyncProgressWorker的功能越來越調用,但不幸的是,指針運行實例(myMod)的DLL是腐敗的所有情況下(同樣像所有其他成員變量)95%。 5%的通話正在進行並且表現得應該如此。 setIntSetting中的cout大多是錯誤的,有時是正確的。

初始化被啓動節點的應用程序,從而setIntSetting獲取的FROM客戶端GUI一個POST消息後叫後立即叫。

相同的結構和設計與另一個模塊完美搭配,但那不是共享庫。難道是,有問題嗎?是不同的DLL的用法?

謝謝大家

回答

0

我發現,我是在開機後的應用程序直接調用初始化方法。從GUI調用setIntSetting正在使用不同的上下文(也許有更好的措辭)。所以從GUI調用init也解決了這個問題!但是仍然有趣的是指向myMod的指針是有效的。我最好不要將此指針存儲爲全局變量。

也許有人可以評論,我怎麼得到指針,而不使用全局變量?比我還可以在每個打開的瀏覽器窗口中啓動一個新實例,用戶,無論如何...