From 292012d86ffda3c19530ad8e9d8788a51db2b6c5 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 22 Sep 2012 14:01:43 +0100 Subject: [PATCH] Do interruption of ThreadStaticText properly. --- src/lib/film.cc | 10 ++++++++-- src/lib/film.h | 1 + src/wx/properties_dialog.cc | 7 ++++++- src/wx/wx_util.cc | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/lib/film.cc b/src/lib/film.cc index 92b91d0ac..d5327aa3a 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -647,6 +647,12 @@ Film::encoded_frames () const if (format() == 0) { return 0; } - - return distance (filesystem::directory_iterator (j2k_dir()), filesystem::directory_iterator ()); + + int N = 0; + for (filesystem::directory_iterator i = filesystem::directory_iterator (j2k_dir ()); i != filesystem::directory_iterator(); ++i) { + ++N; + this_thread::interruption_point (); + } + + return N; } diff --git a/src/lib/film.h b/src/lib/film.h index 40aa7b0f6..cd3b1b8a8 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -29,6 +29,7 @@ #include #include #include +#include #include extern "C" { #include diff --git a/src/wx/properties_dialog.cc b/src/wx/properties_dialog.cc index 0a997bc41..e6c6c9f81 100644 --- a/src/wx/properties_dialog.cc +++ b/src/wx/properties_dialog.cc @@ -76,7 +76,12 @@ string PropertiesDialog::frames_already_encoded () const { stringstream u; - u << _film->encoded_frames(); + try { + u << _film->encoded_frames (); + } catch (thread_interrupted &) { + return ""; + } + if (_film->length()) { u << " (" << (_film->encoded_frames() * 100 / _film->length()) << "%)"; } diff --git a/src/wx/wx_util.cc b/src/wx/wx_util.cc index 712e23570..44d9462e5 100644 --- a/src/wx/wx_util.cc +++ b/src/wx/wx_util.cc @@ -70,7 +70,7 @@ ThreadedStaticText::ThreadedStaticText (wxWindow* parent, string initial, functi ThreadedStaticText::~ThreadedStaticText () { - /* XXX: this is a bit unfortunate */ + _thread->interrupt (); _thread->join (); delete _thread; } -- 2.30.2