Change Dali::Thread, Dali::Mutex and Dali::ConditionalWait to use std::thread from...
[platform/core/uifw/dali-core.git] / dali / devel-api / threading / thread.cpp
1 /*
2  * Copyright (c) 2017 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali/devel-api/threading/thread.h>
20
21 // EXTERNAL INCLUDES
22 #include <cstddef>
23 #include <thread>
24 #include <dali/integration-api/debug.h>
25
26 namespace Dali
27 {
28
29 struct Thread::ThreadImpl
30 {
31   ThreadImpl( Thread& aThis )
32   : thread( &Thread::InternalThreadEntryFunc, std::ref( aThis ) )
33   {
34     // std::thread starts execution immediately
35   }
36   ~ThreadImpl( )
37   {
38     thread.join();
39   }
40   std::thread thread;
41 };
42
43 Thread::Thread()
44 : mImpl( nullptr )
45 {
46 }
47
48 Thread::~Thread()
49 {
50   Join();
51 }
52
53 void Thread::Start()
54 {
55   if( !mImpl )
56   {
57     mImpl = new Thread::ThreadImpl( *this );
58   }
59 }
60
61 void Thread::Join()
62 {
63   delete mImpl;
64   mImpl = nullptr;
65 }
66
67 void Thread::InternalThreadEntryFunc( Thread& aThis )
68 {
69   aThis.Run();
70 }
71
72 } // namespace Dali