我有一个关于在 Firebreath 插件中使用线程的奇怪问题(在这种情况下是一个 FB 插件,但可能发生在任何地方);我将尝试解释:
- 1)我的插件创建一个线程(静态),每次添加到页面时它都会收到一个指向“this”的指针。
- 2)所以,现在我有一个带有指向插件指针的线程,所以我可以调用它的方法。
- 3)到目前为止非常好,但是,假设我有一个按钮(用 HTML 编码),当按下它时将删除当前插件,放置另一个插件并启动另一个线程。
我已经描述了我的场景,现在针对问题,当添加插件时,它会启动一个线程;在线程内部有一个指向“this”的指针。第一次,它被触发......当线程正在执行时,我按下 HTML 按钮(因此,当前插件现在被销毁)并放置了一个新插件。第一个插件的线程结束,现在返回......但它返回到插件的第二个实例。
该插件是一个图像查看器,第一个插件查找图片,它被删除并放置一个新的;但是第一个插件的图像放在第二个插件中。我不知道从哪里开始寻找,显然指针有一个指向插件的地址(例如 12345),插件被删除并使用相同的内存地址(12345)再次实例化。
有没有办法避免这种行为?
这是我到目前为止的代码:
我的插件.h
unsigned ThreadId;
HANDLE hThread;
我的插件.cpp
unsigned __stdcall myPlugin::Thread(void *data)
{
myPlugin* this = (myPlugin*) data;
this->getImage("http:\\host.com\\image.jpg");
_endthreadex(0); //EDIT: addedd this missing line to end the thread
}
void myPlugin::onPluginReady(std::string imageUrl)
{
hThread = (HANDLE)_beginthreadex(NULL, 0, myPlugin::Thread, (void*) **this**, 0, &ThreadId);
}
void myPlugin::getImage()
{
//get an image using CURL... //no problem here
}