2016-01-09 2 views
0

Я пытаюсь загрузить несколько объектов QImage из файлов с помощью threadpool. Я создал свой собственный QRunnable подкласс, чтобы загрузить изображение из файла и скопировать его в буфер:QImage on QThreadPool не работает

class ImageLoader : public QRunnable 
{ 
public: 
    ImageLoader(const QString &filename, char **buffer, int *size) : 
     QRunnable(), 
     filename(filename), 
     buffer(buffer), 
     size(size) 
    {} 

    // QRunnable interface 
    void run() { 
     QImage image(filename); 
     (*size) = image.byteCount(); 
     (*buffer) = new char[(*size)]; 
     memcpy_s(*buffer), (*size), image.constBits(), image.byteCount()); 
    } 

private: 
    const QString filename; 
    char **buffer; 
    int *size; 
}; 

код работает отлично, если выполняется в основном потоке, но как только я запустить работоспособный на QThreadPool , я получаю огромную кучу ошибок, что в основном все говорят то же самое:

QObject::moveToThread: Current thread (0x2a023ae6550) is not the object's thread (0x2a023ae65c0). 
Cannot move to target thread (0x2a023aca0f0) 

первые 2 адреса изменить каждое сообщение, я предполагаю, что они представляют собой различные нити бассейна. Что интересно:
Первый и второй никогда не совпадают, однако они представляют собой одну и ту же «группу», то есть первый адрес первой ошибки может стать вторым адресом второй ошибки и т. Д.

Третий адрес всегда остается неизменным, это адрес основной (gui) нити.

Любые идеи, почему это происходит или как это исправить? Я прочитал документацию QImage, но не смог найти ничего о потоках там, за исключением:

Поскольку QImage является QPaintDevice подкласс, QPainter может использоваться для рисования непосредственно на изображениях. При использовании QPainter на QImage картина может быть выполнена в другом потоке, чем текущий поток графического интерфейса пользователя.

ответ

0

решается вопрос сам:

путь я прошел к QImage недействителен. Я не знаю, как это могло произвести такую ​​ошибку, но после того, как я исправил путь, он работает отлично!

Смежные вопросы