Fix nan issue in features
[trackerpp.git] / include / WorkerThread.h
1 #ifndef _WORKER_THREAD_H
2 #define _WORKER_THREAD_H
3
4 #include <string>
5 #include <thread>
6 #include <queue>
7 #include <mutex>
8 #include <condition_variable>
9 #include "SharedPtr.h"
10
11 namespace suanzi {
12
13 class WorkItem
14 {
15 public:
16     virtual ~WorkItem(){}
17     virtual void run(){}
18
19 protected:
20     WorkItem(){}
21 };
22
23 TK_DECLARE_PTR(WorkItem);
24
25 class WorkerThread
26 {
27 public:
28     WorkerThread(const std::string& name);
29     ~WorkerThread();
30     void enqueue(WorkItemPtr w);
31     void enqueue(WorkItem* w);
32
33 private:
34     std::string m_name;
35     std::thread m_thread;
36     void run();
37     std::condition_variable m_cond;
38     std::mutex m_mutex;
39     std::queue<WorkItemPtr> m_queue;
40 };
41
42 }
43
44
45 #endif // _WORKER_THREAD_H