diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2014-01-13 21:31:35 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2014-01-13 21:31:35 +0100 |
commit | f60ced07e25eb48a79645a328b275125b8aa2ea9 (patch) | |
tree | 8830ddcf2a7d95543483d6b03f54e3b7c237d024 | |
parent | 464cb73809b73f533d4ddc401425484b890b170c (diff) |
hopefully work around tracker thread freeze on exit (issue #18)
Reported-by: @chsims1
Signed-off-by: Stanislaw Halik <sthalik@misaki.pl>
-rw-r--r-- | facetracknoir/facetracknoir.cpp | 3 | ||||
-rw-r--r-- | facetracknoir/tracker.cpp | 6 | ||||
-rw-r--r-- | facetracknoir/tracker.h | 9 |
3 files changed, 11 insertions, 7 deletions
diff --git a/facetracknoir/facetracknoir.cpp b/facetracknoir/facetracknoir.cpp index b83f59d7..d93f2131 100644 --- a/facetracknoir/facetracknoir.cpp +++ b/facetracknoir/facetracknoir.cpp @@ -360,7 +360,6 @@ void FaceTrackNoIR::startTracker( ) { #endif if (tracker) { - tracker->wait(); delete tracker; } @@ -418,8 +417,6 @@ void FaceTrackNoIR::stopTracker( ) { pFilterDialog->unregisterFilter(); if ( tracker ) { - tracker->should_quit = true; - tracker->wait(); delete tracker; tracker = 0; if (Libraries) { diff --git a/facetracknoir/tracker.cpp b/facetracknoir/tracker.cpp index fa1cdee1..57762640 100644 --- a/facetracknoir/tracker.cpp +++ b/facetracknoir/tracker.cpp @@ -31,6 +31,12 @@ Tracker::Tracker(FaceTrackNoIR *parent , main_settings& s) : {
}
+Tracker::~Tracker()
+{
+ should_quit = true;
+ wait();
+}
+
static void get_curve(double pos, double& out, THeadPoseDOF& axis) {
bool altp = (pos < 0) && axis.opts.altp;
if (altp) {
diff --git a/facetracknoir/tracker.h b/facetracknoir/tracker.h index 7ebece02..a33d8e0d 100644 --- a/facetracknoir/tracker.h +++ b/facetracknoir/tracker.h @@ -51,28 +51,29 @@ public: axis_opts& opts; }; -class Tracker : public QThread { +class Tracker : protected QThread { Q_OBJECT private: FaceTrackNoIR *mainApp; QMutex mtx; main_settings& s; - + volatile bool should_quit; protected: void run(); public: Tracker( FaceTrackNoIR *parent, main_settings& s); + ~Tracker(); void getHeadPose(double *data); void getOutputHeadPose(double *data); - - volatile bool should_quit; volatile bool do_center; volatile bool enabled; T6DOF output_camera; + + void start() { QThread::start(); } }; class HeadPoseData { |