У меня странная проблема, связанная с использованием потоков внутри плагина Firebreath (в данном случае это плагин FB, но может произойти где угодно);Я попытаюсь объяснить:
- 1) Мой плагин создает поток (статический) и получает указатель на «this» каждый раз, когда его добавляют на страницу.
- 2) Итак, теперь у меня есть поток с указателем на плагин, так что я могу вызывать его методы.
- 3) Пока очень хорошо, НО, предположим, что у меня есть кнопка (закодированная в HTML),который при нажатии удалит текущий плагин, поставит на место другой и запустит другой поток.
Я описал свой сценарий, теперь для проблемы, когда плагин добавляется, он запускает поток;внутри потока есть указатель на «это».В первый раз, он запускается ... во время выполнения потока я нажимаю кнопку HTML (поэтому текущий плагин теперь уничтожен) и помещается новый.Поток из 1-го плагина заканчивается, и теперь возвращается ... но он возвращается ко 2-му экземпляру плагина.
Плагин является средством просмотра изображений, первый плагин ищет изображение, он удаляется иновый помещен;НО изображение из 1-го плагина помещается во 2-й.Я не знаю, с чего начать поиск, по-видимому, указатель имеет адрес для плагина (например, 12345), плагин удаляется и создается снова с тем же адресом памяти (12345).
Есть ли какой-то способчтобы избежать такого поведения?
У меня есть такой код:
myPlugin.h
unsigned ThreadId;
HANDLE hThread;
myPlugin.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
}