Imported Upstream version 0.8~alpha1
[platform/upstream/syncevolution.git] / src / client-api / src / include / symbian / push / FThread.h
1 /*
2  * Funambol is a mobile platform developed by Funambol, Inc. 
3  * Copyright (C) 2003 - 2007 Funambol, Inc.
4  * 
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU Affero General Public License version 3 as published by
7  * the Free Software Foundation with the addition of the following permission
8  * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
9  * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE
10  * WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS.
11  * 
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 
15  * details.
16  * 
17  * You should have received a copy of the GNU Affero General Public License
18  * along with this program; if not, see http://www.gnu.org/licenses or write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20  * MA 02110-1301 USA.
21  * 
22  * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite
23  * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com.
24  * 
25  * The interactive user interfaces in modified source and object code versions
26  * of this program must display Appropriate Legal Notices, as required under
27  * Section 5 of the GNU Affero General Public License version 3.
28  * 
29  * In accordance with Section 7(b) of the GNU Affero General Public License
30  * version 3, these Appropriate Legal Notices must retain the display of the
31  * "Powered by Funambol" logo. If the display of the logo is not reasonably
32  * feasible for technical reasons, the Appropriate Legal Notices must display
33  * the words "Powered by Funambol".
34  */
35
36 #ifndef INCL_FTHREAD
37 #define INCL_FTHREAD
38
39 #include <e32std.h>
40
41 class FThread {
42
43 protected:
44     bool terminate;
45
46 protected:
47     FThread();
48     virtual ~FThread();
49
50 public:
51     enum Priority { IdlePriority         = EPriorityNull,
52                     LowestPriority       = EPriorityMuchLess,
53                     LowPriority          = EPriorityLess,
54                     NormalPriority       = EPriorityNormal,
55                     HighPriority         = EPriorityMore,
56                     HighestPriority      = EPriorityMuchMore,
57                     TimeCriticalPriority = EPriorityRealTime,
58                     InheritPriority };
59
60 public:
61
62     /**
63      Starts this thread with the given priority. Threads entry point is
64      the run method.
65     */
66     virtual void start( Priority priority = InheritPriority );
67
68     /**
69      Wait for this thread to finish its execution. This method is used to
70      synchronize threads execution (similar to pthread_join)
71     */
72     virtual void wait();
73
74     /**
75      Wait for this thread to finish its execution or the timeout expires.
76      If the thread terminates its execution before the timeout expires then 
77      true is returned, false otherwise.
78     */
79     virtual bool wait(unsigned long timeout);
80
81     /**
82      Returns true iff the thread execution is terminated
83     */
84     virtual bool finished() const;
85
86     /**
87      Returns true iff the thread is still running
88     */
89     virtual bool running() const;
90
91     /**
92      Ask this thread to terminate its execution. But the thread is not
93      forced to terminate. The thread must cooperate to terminate.
94     */    
95     virtual void softTerminate();
96
97 protected:
98     virtual void run() = 0;
99
100 public:
101     /**
102      * Suspend the current thread for the given time (milliseconds)
103      */
104     static void sleep(long msec);
105
106 private:
107     bool isRunning;
108     unsigned long timeout;
109     uint32_t id;
110     RThread  sthread;
111     RTimer   timer;
112
113 private:
114     TInt startTimeout();
115
116     friend TInt symbianRunWrapper(TAny* thread);
117     friend TInt symbianTimeoutWrapper(TAny* thread);
118  
119 };
120
121 #endif