Магия ++ сегфо в потоке

Написание программы сканирования. После того, как он читает изображение, он вызывает convertToPDF() а затем читает следующее изображение. Программа seg неисправностей (RUN FINISHED; Segmentation fault: 11;) когда изображение объявлено в теме. Тот же код работает нормально при запуске в основном потоке, я переместил его из thrPDF в convertToPDF Чтобы убедиться. Так что я думаю, что это связано с распределением памяти Magick ++, которое у меня над головой. Любая помощь приветствуется.

void ScanWindow::convertToPDF(string fileName)
{
pthread_t convert;
string* args = new string(fileName);
void *thrPDF(void*);
pthread_create(&convert,NULL,thrPDF,args);
}

void *thrPDF(void* a)
{
string* fName = (string*) a;
string newFile = fName->substr(0,fName->length()-3) + "pdf";

Magick::Image img(*fName);  // this is the line that seg faults
img.magick("pdf");
img.write(newFile);

pthread_exit(0);
}

Вот стек вызовов:
omp_get_max_threads (?)
GetOpenMPMaximumThreads встроенный
AcquirePixelCache (?)
AcquireImage (?)
Magick :: ImageRef :: ImageRef (?)
Magick :: Image :: Изображение (?)
thrPDF (?)
_pthread_start (?)
thread_start (?)

3

Решение

Если это еще не сделано, вы должны вызывать InitializeMagick (NULL) (или InitializeMagick (* argv)) в основном / исходном потоке перед использованием остальной части API. Это может помочь решить некоторые проблемы, связанные с многопоточностью. С Magick ++, включенным в GraphicsMagick, это является абсолютным требованием в современных выпусках.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]