crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QPixmap и многопоточность, безопасно ли использовать метод load для QPixmap
Гость_wiz29_*
сообщение 31.5.2010, 8:08
Сообщение #1





Гости








    


Недавно столкнулся со следующей проблемой.
При многопоточной загрузке в объекты QPixmap (методом load(...)) переодически возникали падения, может ли быть это связано с тем, что метод QPixmap::load(...) не потокобезопасен?

код примерно такой:

struct ScaledImageInfo
{
    QString m_fileName;
    QPixmap m_image;
};

class makeThumbnail
{
    public:

        typedef ScaledImageInfo result_type;

        makeThumbnail(int w, int h)
            :m_w(w)
            ,m_h(h)
        {
        }

        ~makeThumbnail()
        {
        }

    public:

        ScaledImageInfo operator()(QString fileName)
        {            
            ScaledImageInfo sii;
            sii.m_fileName = fileName;            
            if (sii.m_image.load(fileName))
            {
                sii.m_image = sii.m_image.scaled(m_w, m_h, Qt::KeepAspectRatio/*,
                                        Qt::SmoothTransformation*/);
            }
            return sii;
        }

    private:

        int m_w;
        int m_h;
};

void proc()
{
     QStringlist files;
     ...
     QtConcurrent::mapped(files, makeThumbnail(128, 128));
     ...
}


Заменил QPixmap на QImage и падений пока не замечал...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
alex977
  опции профиля:
сообщение 31.5.2010, 12:52
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 310
Регистрация: 19.6.2008
Из: Россия, МО, г.Мытищи
Пользователь №: 206

Спасибо сказали: 74 раз(а)




Репутация:   8  


Из http://doc.crossplatform.ru/qt/4.6.x/threads-modules.html

Цитата
Painting in Threads

QPainter can be used in a thread to paint onto QImage, QPrinter, and QPicture paint devices.
Painting onto QPixmaps and QWidgets is not supported.


Похоже, так и есть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.2.2018, 9:59