#include <QThread>
#include <QTimerEvent>
-class DrawingWindow::DrawingThread: public QThread {
-public:
- DrawingThread(DrawingWindow &w, ThreadFunction f)
- : drawingWindow(w)
- , threadFunction(f)
- {
- }
-
- void run()
- {
- exit(threadFunction(drawingWindow));
- }
-
-private:
- DrawingWindow &drawingWindow;
- ThreadFunction threadFunction;
-
-};
+#include <iostream>
DrawingWindow::DrawingWindow(ThreadFunction fun, int width, int height)
: QWidget()
unlock();
}
+void DrawingWindow::closeEvent(QCloseEvent *ev)
+{
+ std::cerr << "A\n";
+ lock();
+ std::cerr << "B\n";
+ thread->terminate();
+ std::cerr << "C\n";
+ QWidget::closeEvent(ev);
+ std::cerr << "D\n";
+ thread->wait();
+ std::cerr << "E\n";
+ unlock();
+ std::cerr << "F\n";
+}
+
void DrawingWindow::paintEvent(QPaintEvent *ev)
{
QPainter widgetPainter(this);
dirtyRect = rect;
}
}
+
+DrawingWindow::DrawingThread::DrawingThread(DrawingWindow &w,
+ ThreadFunction f)
+ : drawingWindow(w)
+ , threadFunction(f)
+{
+}
+
+void DrawingWindow::DrawingThread::run()
+{
+ threadFunction(drawingWindow);
+}