libbbb  1.2.1
Groups common code used in some applications and libraries.
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
autothread.h
Go to the documentation of this file.
1 /* ========================================================================= */
2 /* ------------------------------------------------------------------------- *//*
12 
13 
14  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15  Please read COPYING and README files in root folder
16  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17 */
18 /* ------------------------------------------------------------------------- */
19 /* ========================================================================= */
20 #ifndef __AUTOTHREAD_INC__
21 #define __AUTOTHREAD_INC__
22 //
23 //
24 //
25 //
26 /* INCLUDES ------------------------------------------------------------ */
27 
28 #include <libbbb/libbbb.h>
29 #include <libbbb/amorph.h>
30 #include <QThread>
31 
32 /* INCLUDES ============================================================ */
33 //
34 //
35 //
36 //
37 /* DEFINITIONS --------------------------------------------------------- */
38 
39 namespace libbbb {
40 
41 class AutoThread;
42 
43 
47 enum RunFuncCode {
48  EXIT_NOW,
49  ENTER_EXEC
50 };
51 
55 typedef RunFuncCode (*RunFunc) ( AutoThread * th );
56 
57 
61 enum ThreadStg {
62 
66  TH_SAME = 0,
67 
71  TH_WORKER,
72 
76  TH_EACH
77 # define TH_MULTIPLE libbbb::TH_EACH
78 
79 
80 };
81 
82 
83 /* DEFINITIONS ========================================================= */
84 //
85 //
86 //
87 //
88 /* CLASS --------------------------------------------------------------- */
89 
99 class
100  BBBSHARED_EXPORT
101  AutoThread : public QThread {
102 
103  //
104  //
105  //
106  //
107  /* DEFINITIONS ----------------------------------------------------- */
108 
109 
110 
111  /* DEFINITIONS ===================================================== */
112  //
113  //
114  //
115  //
116  /* DATA ------------------------------------------------------------ */
117 
118 private:
119 
120 
124  RunFunc rf_;
125 
126 protected:
127 
132 
133 
134 
135  /* DATA ============================================================ */
136  //
137  //
138  //
139  //
140  /* FUNCTIONS ------------------------------------------------------- */
141 
142 public:
143 
144 
148  AutoThread ( RunFunc rf_, QObject * parent = NULL);
149 
150 
154  virtual ~AutoThread ( void );
155 
156 
160  virtual Amorph & data ( int i )
161  {
162  Q_UNUSED( i );
163  Q_ASSERT( i >= 0 );
164  Q_ASSERT( i < 1 );
165  return d_;
166  }
167 
168 
172  AutoThread * asObj ( void )
173  { return this; }
174 
175 
176 protected:
177 
178 
182  virtual void run ( void );
183 
184 
185  /* FUNCTIONS ======================================================= */
186  //
187  //
188  //
189  //
190 
191 }; /* class AutoThread */
192 
193 /* CLASS =============================================================== */
194 //
195 //
196 //
197 //
198 /* CLASS --------------------------------------------------------------- */
199 
200 #define AutoThreadN(name,cnt) \
201 class name : public AutoThread { \
202  Amorph d___[cnt-1]; \
203 public: \
204  virtual Amorph & data ( int i ) \
205  { \
206  Q_ASSERT( i >= 0 ); \
207  Q_ASSERT( i < cnt ); \
208  if ( i == 0 ) \
209  return d_; \
210  else \
211  return d___[i-1]; \
212  } \
213 }
214 
215 AutoThreadN(AutoThread2,2);
216 AutoThreadN(AutoThread3,3);
217 AutoThreadN(AutoThread4,4);
218 AutoThreadN(AutoThread5,5);
219 
220 /* CLASS =============================================================== */
221 //
222 //
223 //
224 //
225 } // namespace libbbb
226 
227 #endif // __AUTOTHREAD_INC__
228 /* ------------------------------------------------------------------------- */
229 /* ========================================================================= */