Написание программы сканирования. После того, как он читает изображение, он вызывает 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 (?)
Если это еще не сделано, вы должны вызывать InitializeMagick (NULL) (или InitializeMagick (* argv)) в основном / исходном потоке перед использованием остальной части API. Это может помочь решить некоторые проблемы, связанные с многопоточностью. С Magick ++, включенным в GraphicsMagick, это является абсолютным требованием в современных выпусках.
Других решений пока нет …