dl
dl
system
dl_thread.h
浏览该文件的文档.
1
10
#pragma once
11
12
#include <list>
13
#include <functional>
14
#include <thread>
15
#include <cassert>
16
#include <atomic>
17
18
#include "
io/dl_log.h
"
19
20
namespace
dl
21
{
22
23
// 状态 -1未开始 0执行中 1结束
24
// Start -1 -> 0
25
// 完成 0 -> 1
26
// Clear 1 -> -1
27
29
class
Thread
30
{
31
friend
class
ThreadManager
;
32
public
:
33
void
Start
(std::function<
void
(
void
*)> func,
void
* user_data)
34
{
35
if
(_state != -1)
36
{
37
log_err
(
"线程不是初始状态,不能再次运行!"
);
38
return
;
39
}
40
_func = func;
41
_userData = user_data;
42
_t = std::thread{ _run,
this
};
43
_t.detach();
44
}
45
void
Clear
()
46
{
47
if
(_state == -1)
48
return
;
49
if
(_state == 0)
50
{
51
log_err
(
"线程未完成,不能重置状态!"
);
52
return
;
53
}
54
_state = -1;
55
_func =
nullptr
;
56
_userData =
nullptr
;
57
}
58
// 强行结束
59
void
Terminate
();
60
61
int
GetState
() {
return
_state; }
62
bool
IsWork
() {
return
_state == 0; }
63
bool
IsFinish
() {
return
_state == 1; }
64
~Thread
();
65
private
:
66
Thread() :
67
_state{ -1 },
68
_userData{ nullptr }
69
{}
70
71
std::atomic_int _state;
// -1未开始 0执行中 1结束
72
std::function<void(
void
*)> _func;
73
std::thread _t;
74
void
* _userData;
75
static
void
_run(
Thread
* t)
76
{
77
t->_state = 0;
78
t->_func(t->_userData);
79
t->_state = 1;
80
}
81
};
82
83
// 线程管理
84
// 1.创建线程对象
85
// 2.运行线程(传入函数、自定义数据)
86
// 3.删除线程对象
87
89
class
ThreadManager
90
{
91
public
:
92
Thread
*
Create
()
93
{
94
Thread
* ret =
new
Thread
;
95
_allThread.push_back(ret);
96
return
ret;
97
}
98
ThreadManager
()
99
{}
100
~ThreadManager
()
101
{
102
}
103
104
void
_remove_ref
(
Thread
* t)
105
{
106
auto
iter = std::find(_allThread.begin(), _allThread.end(), t);
107
if
(iter == _allThread.end())
108
{
109
assert(0);
110
return
;
111
}
112
_allThread.erase(iter);
113
}
114
private
:
115
std::list<Thread*> _allThread;
116
};
117
extern
ThreadManager*
g_thread
;
118
}
119
dl::Thread
线程
定义
dl_thread.h:30
dl::Thread::~Thread
~Thread()
dl::Thread::Terminate
void Terminate()
dl::Thread::Start
void Start(std::function< void(void *)> func, void *user_data)
定义
dl_thread.h:33
dl::Thread::ThreadManager
friend class ThreadManager
定义
dl_thread.h:31
dl::Thread::Clear
void Clear()
定义
dl_thread.h:45
dl::Thread::IsFinish
bool IsFinish()
定义
dl_thread.h:63
dl::Thread::GetState
int GetState()
定义
dl_thread.h:61
dl::Thread::IsWork
bool IsWork()
定义
dl_thread.h:62
dl::ThreadManager::ThreadManager
ThreadManager()
定义
dl_thread.h:98
dl::ThreadManager::_remove_ref
void _remove_ref(Thread *t)
定义
dl_thread.h:104
dl::ThreadManager::Create
Thread * Create()
定义
dl_thread.h:92
dl::ThreadManager::~ThreadManager
~ThreadManager()
定义
dl_thread.h:100
dl_log.h
日志系统
log_err
#define log_err(...)
定义
dl_log.h:284
dl
定义
dl_array.h:22
dl::g_thread
ThreadManager * g_thread
制作者
1.13.1