У меня странная проблема с использованием потоков внутри плагина Firebreath (в данном случае плагина FB, но это может произойти где угодно); попробую объяснить:
- 1) Мой плагин создает поток (статический) и получает указатель на «это» каждый раз, когда он добавляется на страницу.
- 2) Итак, теперь у меня есть поток с указателем на плагин, поэтому я могу вызывать его методы.
- 3) Пока очень красиво, НО, предположим, что у меня есть кнопка (закодированная в HTML), которая при нажатии будет УДАЛИТЬ текущий плагин, поставить на место другой и запустить другой поток.
Я описал свой сценарий, теперь о проблеме, когда добавляется плагин, он запускает поток; внутри потока есть указатель на "это". В первый раз он запускается... пока поток выполняется, я нажимаю кнопку HTML (таким образом, текущий плагин теперь уничтожен) и размещается новый. Поток из 1-го плагина завершается и теперь возвращается... но он возвращается ко 2-му экземпляру плагина.
Плагин является просмотрщиком изображений, первый плагин ищет картинку, она удаляется и ставится новая; НО изображение из 1-го плагина помещается во 2-й. Я не знаю, с чего начать поиск, видимо, указатель имеет адрес плагина (например, 12345), плагин удаляется и создается снова с тем же адресом памяти (12345).
Есть ли способ избежать такого поведения?
Это код, который у меня есть до сих пор:
мой плагин.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
}
_endthreadex(0);
в функциюThread
. Спасибо. - person Maximiliano Santa Cruz   schedule 07.03.2012