Информация об изменениях

Сообщение Re[3]: вопрос от 15.03.2022 13:03

Изменено 17.03.2022 16:26 Zhendos

Re[3]: вопрос
Здравствуйте, milkpot, Вы писали:

M>Здравствуйте, SаNNy, Вы писали:


SNN>>Попрбуйте

SNN>>
SNN>>connect(workerThread, &WorkerThread::sendData, this, &MainWindow::displayPixmap, Qt::QueuedConnection);
SNN>>


M>Попробовал, поведение программы не изменилось.


Думаю здесь две проблемы.
Первая как уже указали есть гонка по данным.
Потому что workerThread на самом деле принадлежит не "сам" себе,
то есть "workerThread.thread()" возврашает главный поток
и функция отрисовки:
connect(workerThread, &WorkerThread::sendData, this, &MainWindow::displayPixmap);

будет вызываться в главном потоке.

Все остальные "connect" с workerThread тоже приводят к гонке данных.
Именно поэтому рекомендует не наследовать QThread.

Вторая проблема как я понял что все отрисовывается слишком быстро и
видно части предыдущего кадра?

Думаю нужно исправить все гонки данных, а только потом с этой проблемой разбираться.
Re[3]: вопрос
Здравствуйте, milkpot, Вы писали:

M>Здравствуйте, SаNNy, Вы писали:


SNN>>Попрбуйте

SNN>>
SNN>>connect(workerThread, &WorkerThread::sendData, this, &MainWindow::displayPixmap, Qt::QueuedConnection);
SNN>>


M>Попробовал, поведение программы не изменилось.


Думаю здесь две проблемы.
Первая как уже указали есть гонка по данным.
Потому что workerThread на самом деле принадлежит не "сам" себе,
то есть "workerThread.thread()" возврашает главный поток
и функция отрисовки:
connect(workerThread, &WorkerThread::sendData, this, &MainWindow::displayPixmap);

будет вызываться не в главном потоке.

Все остальные "connect" с workerThread тоже приводят к гонке данных.
Именно поэтому рекомендует не наследовать QThread.

Вторая проблема как я понял что все отрисовывается слишком быстро и
видно части предыдущего кадра?

Думаю нужно исправить все гонки данных, а только потом с этой проблемой разбираться.