diff options
Diffstat (limited to 'demos/mandelbrot/mandelbrot.h')
-rw-r--r-- | demos/mandelbrot/mandelbrot.h | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/demos/mandelbrot/mandelbrot.h b/demos/mandelbrot/mandelbrot.h index 23df7c9dd..1468bdca9 100644 --- a/demos/mandelbrot/mandelbrot.h +++ b/demos/mandelbrot/mandelbrot.h @@ -4,17 +4,37 @@ #include <Eigen/Array> #include <QtGui/QApplication> #include <QtGui/QWidget> +#include <QtCore/QThread> + +class MandelbrotWidget; + +class MandelbrotThread : public QThread +{ + friend class MandelbrotWidget; + MandelbrotWidget *widget; + long long total_iter; + int id, max_iter; + bool single_precision; + + public: + MandelbrotThread(MandelbrotWidget *w, int i) : widget(w), id(i) {} + void run(); + template<typename Real> void render(int img_width, int img_height); +}; class MandelbrotWidget : public QWidget { Q_OBJECT + friend class MandelbrotThread; Eigen::Vector2d center; double xradius; int size; unsigned char *buffer; QPoint lastpos; int draft; + MandelbrotThread **threads; + int threadcount; protected: void resizeEvent(QResizeEvent *); @@ -28,8 +48,16 @@ class MandelbrotWidget : public QWidget size(0), buffer(0), draft(16) { setAutoFillBackground(false); + threadcount = QThread::idealThreadCount(); + threads = new MandelbrotThread*[threadcount]; + for(int th = 0; th < threadcount; th++) threads[th] = new MandelbrotThread(this, th); + } + ~MandelbrotWidget() + { + if(buffer) delete[]buffer; + for(int th = 0; th < threadcount; th++) delete threads[th]; + delete[] threads; } - ~MandelbrotWidget() { if(buffer) delete[]buffer; } }; #endif // MANDELBROT_H |