[Non-ACR][TFIVE-357]
[platform/core/system/sensord.git] / src / sensorctl / mainloop.cpp
1 /*
2  * sensorctl
3  *
4  * Copyright (c) 2017 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #include "mainloop.h"
21
22 void mainloop::run(void)
23 {
24         instance().start_loop();
25 }
26
27 void mainloop::stop(void)
28 {
29         instance().stop_loop();
30 }
31
32 bool mainloop::is_running(void)
33 {
34         return instance().is_loop_running();
35 }
36
37 mainloop& mainloop::instance(void)
38 {
39         static mainloop loop;
40         return loop;
41 }
42
43 void mainloop::start_loop(void)
44 {
45         if (is_loop_running())
46                 return;
47
48         m_mainloop = g_main_loop_new(NULL, false);
49         m_running.store(true);
50
51         g_main_loop_run(m_mainloop);
52 }
53
54 void mainloop::stop_loop(void)
55 {
56         if (!is_loop_running())
57                 return;
58
59         g_main_loop_quit(m_mainloop);
60         g_main_loop_unref(m_mainloop);
61         m_mainloop = NULL;
62         m_running.store(false);
63 }
64
65 bool mainloop::is_loop_running(void)
66 {
67         return m_running.load();
68 }
69