blob: dfb7b2223bf2ead304128349b96d6bc353602897 [file] [log] [blame]
Wind Yuan75564b12015-01-15 06:51:15 -05001/*
2 * xcam_thread.h - Thread
3 *
4 * Copyright (c) 2014 Intel Corporation
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 * Author: Wind Yuan <feng.yuan@intel.com>
19 */
20
21#ifndef XCAM_THREAD_H
22#define XCAM_THREAD_H
23
Wind Yuan9fbfce62017-11-24 19:24:15 +080024#include <xcam_std.h>
25#include <xcam_mutex.h>
Wind Yuan75564b12015-01-15 06:51:15 -050026
27namespace XCam {
28
29class Thread {
30public:
31 Thread (const char *name = NULL);
32 virtual ~Thread ();
33
34 bool start ();
Wind Yuandd9d1372015-12-17 02:07:43 +080035 virtual bool emit_stop ();
Wind Yuan75564b12015-01-15 06:51:15 -050036 bool stop ();
37 bool is_running ();
Wind Yuan4f528752017-09-01 17:09:00 +080038 const char *get_name () const {
39 return _name;
40 }
Wind Yuan75564b12015-01-15 06:51:15 -050041
42protected:
43 // return true to start loop, else the thread stopped
44 virtual bool started ();
45 virtual void stopped ();
46 // return true to continue; false to stop
47 virtual bool loop () = 0;
48private:
49 XCAM_DEAD_COPY (Thread);
50
51
52private:
53 static int thread_func (void *user_data);
54
55private:
56 char *_name;
57 pthread_t _thread_id;
58 XCam::Mutex _mutex;
59 XCam::Cond _exit_cond;
60 bool _started;
Wind Yuanb7f69912017-02-13 01:46:41 -050061 bool _stopped;
Wind Yuan75564b12015-01-15 06:51:15 -050062};
63
64};
65
66#endif //XCAM_THREAD_H