[dali_2.3.30] Merge branch 'devel/master'
[platform/core/uifw/dali-core.git] / dali / devel-api / threading / thread.h
1 #ifndef DALI_THREAD_H
2 #define DALI_THREAD_H
3
4 /*
5  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // INTERNAL INCLUDES
22 #include <dali/public-api/common/dali-common.h>
23
24 /**
25  * The top level DALi namespace
26  */
27 namespace Dali
28 {
29 /*
30  * @brief Abstract class for thread functionality. Can be used for worker threads.
31  */
32 class DALI_CORE_API Thread
33 {
34 public:
35   /**
36    * @brief Creates a new thread and make it executable.
37    */
38   void Start();
39
40   /**
41    * @brief Wait for thread termination.
42    */
43   void Join();
44
45 protected:
46   /**
47    * @brief Constructor
48    */
49   Thread();
50
51   /**
52    * @brief Destructor, virtual as this is used as base class
53    */
54   virtual ~Thread();
55
56   /**
57    * The routine that the thread will execute once it is started.
58    */
59   virtual void Run() = 0;
60
61 private:
62   /**
63    * Helper for the thread calling the entry function.
64    * @param[in] This A pointer to the current thread object
65    */
66   static void InternalThreadEntryFunc(Thread& This);
67
68   // Not copyable or movable
69   Thread(const Thread&) = delete;            ///< Deleted copy constructor
70   Thread(Thread&&)      = delete;            ///< Deleted move constructor
71   Thread& operator=(const Thread&) = delete; ///< Deleted copy assignment operator
72   Thread& operator=(Thread&&) = delete;      ///< Deleted move assignment operator
73
74 private:
75   struct ThreadImpl;
76   ThreadImpl* mImpl;
77 };
78
79 } // namespace Dali
80
81 #endif // DALI_THREAD_H