NAN - AsyncProgressWorker已损坏成员
问题描述:
我创建了一个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的用法?
谢谢大家
答
我发现,我是在开机后的应用程序直接调用初始化方法。从GUI调用setIntSetting正在使用不同的上下文(也许有更好的措辞)。所以从GUI调用init也解决了这个问题!但是仍然有趣的是指向myMod的指针是有效的。我最好不要将此指针存储为全局变量。
也许有人可以评论,我怎么得到指针,而不使用全局变量?比我还可以在每个打开的浏览器窗口中启动一个新实例,用户,无论如何...