Здравствуйте, Igore, Вы писали:
I>I>class Worker2 : public QObject {
I>///...
I>public:
I> void stopStrm()
I> {
I> mStop = true;
I> QMetaObject::invokeMethod(this, "doStop", Qt::QueuedConnection);
I> }
I> void readPendingDatagrams()
I> {
I> QByteArray buffer;
I> while(m_pSocket->hasPendingDatagrams() && !mStop)
I> ///...
I> }
I>private:
I> std::atomic<bool> mStop = {false};
I>}
I>
Спасибо.
На данный момент Opengl графика отображается со скоростью 32 paintGL вызовов в секунду(это взято из примера qopenglwidget).
Задача: отображать кадр со скоростью 50 вызовов в секунду
class GLWidget : public QOpenGLWidget
{
Q_OBJECT
public:
GLWidget(Helper *helper, QWidget *parent);
public slots:
void animate();
protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private:
Helper *helper;
int elapsed;
QTime m_time;//new
int m_frames;//new
QSurfaceFormat format1;
};
GLWidget::GLWidget(Helper *helper, QWidget *parent)
: QOpenGLWidget(parent), helper(helper)
{
elapsed = 0;
m_frames=0;//init
// setFixedSize(200, 200);
// setFixedSize(320, 256);
setFixedSize(640, 480);
setAutoFillBackground(false);
format1.setDepthBufferSize(32);
format1.setStencilBufferSize(16);
format1.setVersion(3, 2);
format1.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
format1.setProfile(QSurfaceFormat::CoreProfile);
setFormat(format1);
}
void GLWidget::animate()
{
elapsed = (elapsed + qobject_cast<QTimer*>(sender())->interval()) % 1000;
update();
}
void GLWidget::paintEvent(QPaintEvent *event)
{
QPainter painter;
painter.begin(this);
painter.setRenderHint(QPainter::Antialiasing);
helper->paint(&painter, event, elapsed);
//--- new
if (const int elapsed_a = m_time.elapsed()) {
QString framesPerSecond;
framesPerSecond.setNum(m_frames /(elapsed_a / 1000.0), 'f', 2);
painter.setPen( Qt::white);
painter.drawText(20, 40, framesPerSecond + " paintGL calls / s");
}
//---
;
painter.end();
//--- new
if (!(m_frames % 100)) {
m_time.start();
m_frames = 0;
}
// m_fAngle += 1.0f;
++m_frames;
//---
}
void Helper::paint(QPainter *painter, QPaintEvent *event, int elapsed)
{
painter->translate(-1, 0);
painter->drawImage(event->rect(),img2);
}
void Worker2::setUdpData(const QByteArray& qba)
{
QString result;
int block=0;
color_shift=0;
quint8 kadr_num=qba.at(3);
quint16 str_num=MAKEWORD(qba.at(5),qba.at(4));//uint
quint16 package_num=MAKEWORD(qba.at(7),qba.at(6));
int data_quant=/*1228800*/ 307200;
if(cnd_one)
{
if(package_num!=1919)
return;
else if(package_num==1919)
{
cnd_one=false;
return;
}
}
for(int i=0;i<640/4;i++)
{
block=8+color_shift;
another_qba[i_counter]=qba.at( block);
i_counter++;
color_shift+=4;
}
if(i_counter==data_quant)
{
cnd_two=true;
cnd_one=true;
color_shift=0;
prepare_generate_data();
i_counter=0;
}
// qDebug() << "i_counter" << i_counter;
return;
}