Skip to content

Instantly share code, notes, and snippets.

@sthalik
Created January 13, 2014 19:01
Show Gist options
  • Save sthalik/8406027 to your computer and use it in GitHub Desktop.
Save sthalik/8406027 to your computer and use it in GitHub Desktop.
potentially fix hang despite volatile
diff --git a/facetracknoir/facetracknoir.cpp b/facetracknoir/facetracknoir.cpp
index b83f59d..d93f213 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 fa1cdee..5776264 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 7ebece0..a33d8e0 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 {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment