-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtaskQueue.h
More file actions
59 lines (46 loc) · 1.09 KB
/
Copy pathtaskQueue.h
File metadata and controls
59 lines (46 loc) · 1.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#pragma once
#include <pthread.h>
#include <queue>
namespace louis {
namespace thread {
// 用using给函数指针起别名(C++11)
using callback = void (*)(void* arg);
// 任务结构体
template <class T>
struct Task {
public:
// 无参构造
Task() {
process_ = nullptr;
arg_ = nullptr;
}
// 有参构造
Task(callback process, void* arg) {
process_ = process;
arg_ = static_cast<T*>(arg);
}
// 显式指定编译器提供默认构造函数(C++11)
~Task() = default;
callback process_; // 处理函数
T* arg_; // 处理函数的参数
};
// 任务队列
template <class T>
class TaskQueue {
public:
// 构造析构
TaskQueue();
~TaskQueue();
// 取出任务
Task<T> popTask();
// 添加任务
void pushTask(const Task<T>& task);
// 获取队列元素个数
std::size_t getTasksCount();
private:
std::queue<Task<T>> qTasks; // 底层队列
pthread_mutex_t mutex; // 互斥锁
};
} // namespace thread
} // namespace louis
#include "taskQueue.inl"