【发布时间】:2014-10-21 04:09:38
【问题描述】:
我想渲染一个三角形,它的坐标由一个单独的线程不断更新(使用 m_offset)。线程在整个运行时并行运行。
我的应用程序使用 GL 小部件初始化 QT 窗口。
#include "mainwindow.h"
#include <QApplication>
#include <iostream>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
GL 小部件(glwidget.cpp)定义如下:
#include "glwidget.h"
#include <iostream>
#include <thread>
GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent)
{
m_offset = 0.0
// HERE, I want to start a thread on updateCoordinates().
// Something like this: (this doesn't work)
//std::thread mythread (updateCoordinates);
// or this (getting segfault)
//std::thread mythread (&GLWidget::updateCoordinates, this);
}
void GLWidget::initializeGL()
{
glClearColor(0.2, 0.2, 0.2, 1);
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glColor3f(1,0,0);
glVertex3f(-0.5+m_offset, -0.5+m_offset, 0);
glColor3f(0,1,0);
glVertex3f(0.5+m_offset, -0.5+m_offset, 0);
glColor3f(0,0,1);
glVertex3f(0.0+m_offset, 0.5+m_offset, 0);
glEnd();
}
void GLWidget::resizeGL(int w, int h)
{}
void GLWidget::updateCoordinates()
{
while(true)
{
m_offset += 0.0001;
}
}
这里是对应的标题:
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QGLWidget>
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
explicit GLWidget(QWidget *parent = 0);
void initializeGL();
void paintGL();
void resizeGL(int w, int h);
void startSimulation();
void stopSimulation();
void updateCoordinates();
private:
double m_offset;
signals:
public slots:
};
#endif // GLWIDGET_H
如何在此类中生成一个持续运行updateCoordinates() 的新线程,同时通过paingGL() 更新图形?
谢谢!
【问题讨论】:
标签: multithreading qt c++11