CARLA
载入中...
搜索中...
未找到
LibCarla
source
carla
ThreadGroup.h
浏览该文件的文档.
1
// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
2
// de Barcelona (UAB).
3
//
4
// This work is licensed under the terms of the MIT license.
5
// For a copy, see <https://opensource.org/licenses/MIT>.
6
7
#pragma once
// 确保头文件只被包含一次,避免重复包含导致的问题
8
9
#include "
carla/Debug.h
"
// 包含自定义调试功能的头文件
10
#include "
carla/NonCopyable.h
"
// 包含定义 NonCopyable 类的头文件,避免类被复制
11
12
#include <thread>
// 包含线程相关的库
13
#include <vector>
// 包含迭代器相关的头文件,定义了与迭代器操作相关的功能
14
15
namespace
carla
{
16
17
// ThreadGroup 类用于管理一组线程,并确保它们在销毁时被正确地等待
18
class
ThreadGroup
:
private
NonCopyable
{
// 继承自 NonCopyable,防止复制该类
19
public
:
20
21
ThreadGroup
() =
default
;
// 默认构造函数
22
23
~ThreadGroup
() {
// 析构函数
24
JoinAll
();
// 在销毁时确保所有线程都已完成
25
}
26
27
// 创建一个新线程并执行给定的可调用对象。
28
// 模板参数 F 是一个可调用对象类型。
29
30
template
<
typename
F>
31
void
CreateThread
(F &&functor) {
32
_threads
.emplace_back(std::forward<F>(functor));
// 将线程添加到容器中
33
}
34
// 创建多个线程,每个线程执行相同的可调用对象
35
template
<
typename
F>
36
void
CreateThreads
(
size_t
count, F functor) {
37
_threads
.reserve(
_threads
.size() + count);
// 预留足够的空间以避免频繁的内存分配
38
for
(
size_t
i = 0u; i < count; ++i) {
39
CreateThread
(functor);
// 创建线程并执行 functor
40
}
41
}
42
43
// 等待所有线程完成
44
void
JoinAll
() {
45
for
(
auto
&thread :
_threads
) {
46
DEBUG_ASSERT_NE
(thread.get_id(), std::this_thread::get_id());
47
if
(thread.joinable()) {
// 检查线程是否可加入
48
thread.join();
// 等待线程完成
49
}
50
}
51
_threads
.clear();
// 清除线程容器
52
}
53
54
private
:
55
56
std::vector<std::thread>
_threads
;
// 存储线程的容器
57
};
58
59
}
Debug.h
DEBUG_ASSERT_NE
#define DEBUG_ASSERT_NE(lhs, rhs)
Definition
Debug.h:82
NonCopyable.h
carla::NonCopyable
这个类用于禁止拷贝和移动构造函数及赋值操作
Definition
LibCarla/source/carla/NonCopyable.h:12
carla::ThreadGroup
Definition
ThreadGroup.h:18
carla::ThreadGroup::~ThreadGroup
~ThreadGroup()
Definition
ThreadGroup.h:23
carla::ThreadGroup::_threads
std::vector< std::thread > _threads
Definition
ThreadGroup.h:56
carla::ThreadGroup::JoinAll
void JoinAll()
Definition
ThreadGroup.h:44
carla::ThreadGroup::CreateThreads
void CreateThreads(size_t count, F functor)
Definition
ThreadGroup.h:36
carla::ThreadGroup::ThreadGroup
ThreadGroup()=default
carla::ThreadGroup::CreateThread
void CreateThread(F &&functor)
Definition
ThreadGroup.h:31
carla
CARLA模拟器的主命名空间。
Definition
Carla.cpp:139
制作者
1.10.0