#include <string>
#include <boost/thread/mutex.hpp>
-#include <sigc++/sigc++.h>
+#include <boost/enable_shared_from_this.hpp>
+#include <boost/signals2.hpp>
-class Log;
-class FilmState;
+class Film;
class Options;
/** @class Job
* @brief A parent class to represent long-running tasks which are run in their own thread.
*/
-class Job
+class Job : public boost::enable_shared_from_this<Job>
{
public:
- Job (boost::shared_ptr<const FilmState> s, boost::shared_ptr<const Options> o, Log* l);
+ Job (boost::shared_ptr<Film> s, boost::shared_ptr<Job> req);
+ virtual ~Job() {}
/** @return user-readable name of this job */
virtual std::string name () const = 0;
void start ();
+ bool is_new () const;
bool running () const;
bool finished () const;
bool finished_ok () const;
void descend (float);
float overall_progress () const;
- void emit_finished ();
+ boost::shared_ptr<Job> required () const {
+ return _required;
+ }
- /** Emitted from the GUI thread */
- sigc::signal0<void> Finished;
+ boost::signals2::signal<void()> Finished;
protected:
+ virtual int remaining_time () const;
+
+ /** Description of a job's state */
enum State {
NEW, ///< the job hasn't been started yet
RUNNING, ///< the job is running
void set_state (State);
void set_error (std::string e);
- boost::shared_ptr<const FilmState> _fs;
- boost::shared_ptr<const Options> _opt;
-
- /** A log that this job can write to */
- Log* _log;
+ /** Film for this job */
+ boost::shared_ptr<Film> _film;
private:
void run_wrapper ();
+ boost::shared_ptr<Job> _required;
+
/** mutex for _state and _error */
mutable boost::mutex _state_mutex;
+ /** current state of the job */
State _state;
+ /** message for an error that has occurred (when state == FINISHED_ERROR) */
std::string _error;
+ /** time that this job was started */
time_t _start_time;
-
+
+ /** mutex for _stack and _progress_unknown */
mutable boost::mutex _progress_mutex;
struct Level {
/** true if this job's progress will always be unknown */
bool _progress_unknown;
+
+ int _ran_for;
};
#endif