Есть 3 функции.
1: вызывает void Qwidget::repaint ()
2: вызывает void Qwidget::update ()
Обе эти функции работают в разных потоках(чтобы 2ой поток относительно важный, не устраивал гонок 1ый поток сделал через repaint - немедленная отрисовка без построения/добавления в планировку)
3: и есть сам обработчик paintEvent в самом начале функции стоит мьютекс дабы не был краш из-за одновременного использования общих ресурсов...
Сам вопрос: почему когда я пишу update в обоих(1ом и 2ом) всё хорошо, но иногда не приходит то что важно(оно затирается), когда оба repaint у друга на компе залагивает у меня всё норм, когда я делаю как написал в пунктах(1ый и 2ой), то если в релизе всё норм, а если в дебаге то сначало начинает лагать, а потом падать в рандомных точках программы, что я делаю не так, можно ли так делать(или должно чтото одно вызываться) какие есть варианты это поправить?
UPD:
Примерно такой код:
TestClass.h:
class TestClass : public QWidget, public QObject {
Q_OBJECT
mutable QMutex mDataMutex;
public:
TestClass (QWidget *parent = 0);
~TestClass ();
public slots:
void funk_1();
void funk_2();
};
TestClass.cpp
#include "TestClass.h"
TestClass::TestClass(QWidget *parent)
: QWidget(parent){
this->setWindowFlags(Qt::Widget);
this->setAttribute(Qt::WA_PaintOnScreen);
this->setWindowTitle("Win_1");
this->setWindowFlags(((windowFlags() | Qt::CustomizeWindowHint) & ~Qt::WindowCloseButtonHint ));
}
void TestClass::funk_1() {
repaint();
}
void TestClass::paintEvent(QPaintEvent* event) {
QMutexLocker ml(&mDataMutex);
if (mPainter.begin(this)) {
if (!mOutFrame->isNull()) {
mPainter.drawImage(imgPos, *Frame);
}
mPainter.end();
}
}
void TestClass::funk_2() {
update();
}
TestClass::funk_2 - вызывается примерно 50 раз в секунду, а TestClass::funk_1 - 7раз в секунду. Что за переменные:
if (!mOutFrame->isNull()) {
mPainter.drawImage(imgPos, *Frame);
}
Спрашивать не нужно, класс большой взял только то что касается конкретной проблемы, а так каждая переменная то что и нужно для mPainter.drawImage.