source: pacpusframework/branches/0.0.x/include/Pacpus/PacpusTools/AsyncWorkerBase.h

Last change on this file was 116, checked in by Marek Kurdej, 11 years ago

Added: PacpusException - base class for all exceptions. DbiteExceptions inherits from it.
Added: PacpusLibConfig.h - dllimport/dllexport clauses separated from pacpus.h.
Update: comments.

  • Property svn:keywords set to Id
File size: 3.0 KB
Line 
1// %pacpus:license{
2// This file is part of the PACPUS framework distributed under the
3// CECILL-C License, Version 1.0.
4// %pacpus:license}
5/// @file
6/// @author Samuel Gosselin <firstname.surname@utc.fr>
7/// @date December, 2012
8/// @version $Id: AsyncWorkerBase.h 116 2013-06-25 11:44:25Z kurdejma $
9/// @copyright Copyright (c) UTC/CNRS Heudiasyc 2006 - 2013. All rights reserved.
10/// @brief Async worker base class
11///
12/// Detailed description.
13
14#ifndef DEF_PACPUS_ASYNC_WORKER_BASE_H
15#define DEF_PACPUS_ASYNC_WORKER_BASE_H
16
17#include <boost/noncopyable.hpp>
18#include <QObject>
19
20#include "Pacpus/kernel/PacpusToolsConfig.h"
21
22namespace pacpus
23{
24
25/// A simple base class for asynchronous workers able to partake in the
26/// Qt slot / signal mechanism
27///
28/// This class represents an asynchronous event-based worker able to receive and
29/// send Qt signals to other workers or threads. The rationale is to be able to
30/// define stateful objects that perform calculations asynchronously, triggered
31/// by external user-defined messages.
32class PACPUSTOOLS_API AsyncWorkerBase
33 : public QObject
34 , private boost::noncopyable
35{
36 Q_OBJECT
37
38public:
39 /// Constructor.
40 AsyncWorkerBase();
41
42 /// Destructor.
43 virtual ~AsyncWorkerBase();
44
45 /// Starts the worker by creating a new thread for it, and calling the setup() virtual method. */
46 void start();
47
48 /// Terminates the worker as soon as there are no more requests pending and its current processing
49 /// is finished.
50 ///
51 /// This method tries to end the worker gracefully. All pending signals sent before the stop() request will
52 /// be honored.
53 /// It is safe to call this method from any thread.
54 ///
55 /// @param autoDelete if true, deletes the worker as soon as its event loop has finished processing.
56 void stop(bool autoDelete);
57
58 /// @returns @b true if the worker is active, @b false otherwise.
59 bool isActive() const
60 {
61 return active_;
62 }
63
64Q_SIGNALS:
65 /// @todo Documentation
66 void finished();
67 /// @todo Documentation
68 void stopped();
69
70protected:
71 /// @todo Documentation
72 virtual void setup();
73 /// @todo Documentation
74 virtual void process();
75 /// @todo Documentation
76 virtual void cleanup();
77
78 /// Returns true if the worker is stopping.
79 bool isStopping() const { return stopping_; }
80
81private Q_SLOTS:
82 /// @todo Documentation
83 void doSetup();
84 /// @todo Documentation
85 void doFinish();
86
87private:
88 /// Ends the worker, asking the underlying thread to terminate
89 ///
90 /// This method signals the end of processing and requests the underlying thread to terminate. Actual termination
91 /// will occur as soon as all pending signals (including those that may come from other workers during the
92 /// finish request handling) have been processed.
93 void finish();
94
95 // Attributes
96 bool active_;
97 bool stopping_;
98};
99
100} // namespace pacpus
101
102#endif // DEF_PACPUS_ASYNC_WORKER_BASE_H
Note: See TracBrowser for help on using the repository browser.