crossplatform.ru

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


  Ответ в QPixmap и многопоточность
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
alex977 Дата 31.5.2010, 12:52
  Из 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.


Похоже, так и есть.
wiz29 Дата 31.5.2010, 8:08
  Недавно столкнулся со следующей проблемой.
При многопоточной загрузке в объекты 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 и падений пока не замечал...
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 9:27