我創建了一個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的用法?
謝謝大家