#include <QWidget>
#include <Qt>
+#include <QThread>
+
class DrawingWindow: public QWidget {
/* Q_OBJECT */
void drawLine(int x1, int y1, int x2, int y2);
protected:
+ void closeEvent(QCloseEvent *ev);
void paintEvent(QPaintEvent *ev);
void showEvent(QShowEvent *ev);
void timerEvent(QTimerEvent *ev);
private:
- class DrawingThread;
+ class DrawingThread: public QThread {
+ public:
+ DrawingThread(DrawingWindow &w, ThreadFunction f);
+ void run();
+
+ void enableTerminate();
+ void disableTerminate();
+
+ private:
+ DrawingWindow &drawingWindow;
+ ThreadFunction threadFunction;
+
+ };
static const int paintInterval = 33;
bool dirtyFlag;
QRect dirtyRect;
- bool mutex_enabled;
QMutex mutex;
void initialize(ThreadFunction fun, int width, int height);
inline
void DrawingWindow::lock()
{
- if (mutex_enabled)
- mutex.lock();
- if (!mutex_enabled)
- mutex.unlock();
+ thread->disableTerminate();
+ mutex.lock();
}
inline
void DrawingWindow::unlock()
{
mutex.unlock();
+ thread->enableTerminate();
}
inline
setDirtyRect(r.normalized());
}
+inline
+void DrawingWindow::DrawingThread::enableTerminate()
+{
+ setTerminationEnabled(true);
+}
+
+inline
+void DrawingWindow::DrawingThread::disableTerminate()
+{
+ setTerminationEnabled(false);
+}
+
#endif // !DRAWING_WINDOW_H