source: pacpusframework/branches/2.0-beta1/include/Pacpus/PacpusTools/AsyncWorkerBase.h@ 162

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

Update: merged changes from trunk.

  • Property svn:executable set to *
File size: 3.1 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 76 2013-01-10 17:05:10Z 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 <Pacpus/PacpusTools/PacpusToolsConfig.h>
19#include <QObject>
20
21namespace pacpus
22{
23
24/// A simple base class for asynchronous workers able to partake in the
25/// Qt slot / signal mechanism
26///
27/// This class represents an asynchronous event-based worker able to receive and
28/// send Qt signals to other workers or threads. The rationale is to be able to
29/// define stateful objects that perform calculations asynchronously, triggered
30/// by external user-defined messages.
31class PACPUSTOOLS_API AsyncWorkerBase
32 : public QObject
33 //, private boost::noncopyable
34{
35 Q_OBJECT
36 Q_DISABLE_COPY(AsyncWorkerBase)
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
64 Q_SIGNALS:
65 /// @todo Documentation
66 void finished();
67 /// @todo Documentation
68 void stopped();
69
70 protected:
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
81 private Q_SLOTS:
82 /// @todo Documentation
83 void doSetup();
84 /// @todo Documentation
85 void doFinish();
86
87 private:
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.