summaryrefslogtreecommitdiff
path: root/src/lib/job.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-05-09 15:14:08 +0100
committerCarl Hetherington <cth@carlh.net>2013-05-09 15:14:08 +0100
commit92cafb6fc686a041354da2eabde6bcb2f6846e1d (patch)
treecdc26dde96d8c9ed1e9c60056a404ca3df2dcfac /src/lib/job.cc
parentfd040c2bd27fde35424a384174ecb56c643764cd (diff)
parent6e5c4e570f26e05124ab0ef67e39c07bab9cb4d5 (diff)
Merge master.
Diffstat (limited to 'src/lib/job.cc')
-rw-r--r--src/lib/job.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/lib/job.cc b/src/lib/job.cc
index 812380594..2e6385d62 100644
--- a/src/lib/job.cc
+++ b/src/lib/job.cc
@@ -26,6 +26,7 @@
#include <libdcp/exceptions.h>
#include "job.h"
#include "util.h"
+#include "cross.h"
#include "i18n.h"
@@ -153,6 +154,13 @@ Job::finished_cancelled () const
return _state == FINISHED_CANCELLED;
}
+bool
+Job::paused () const
+{
+ boost::mutex::scoped_lock lm (_state_mutex);
+ return _state == PAUSED;
+}
+
/** Set the state of this job.
* @param s New state.
*/
@@ -188,6 +196,10 @@ Job::set_progress (float p)
_progress_unknown = false;
_stack.back().normalised = p;
boost::this_thread::interruption_point ();
+
+ if (paused ()) {
+ dcpomatic_sleep (1);
+ }
}
/** @return fractional overall progress, or -1 if not known */
@@ -324,3 +336,19 @@ Job::cancel ()
_thread->interrupt ();
_thread->join ();
}
+
+void
+Job::pause ()
+{
+ if (running ()) {
+ set_state (PAUSED);
+ }
+}
+
+void
+Job::resume ()
+{
+ if (paused ()) {
+ set_state (RUNNING);
+ }
+}