Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/source/ps/TaskManager.h
/* Copyright (C) 2021 Wildfire Games. | /* Copyright (C) 2022 Wildfire Games. | ||||
* This file is part of 0 A.D. | * This file is part of 0 A.D. | ||||
* | * | ||||
* 0 A.D. is free software: you can redistribute it and/or modify | * 0 A.D. is free software: you can redistribute it and/or modify | ||||
* it under the terms of the GNU General Public License as published by | * it under the terms of the GNU General Public License as published by | ||||
* the Free Software Foundation, either version 2 of the License, or | * the Free Software Foundation, either version 2 of the License, or | ||||
* (at your option) any later version. | * (at your option) any later version. | ||||
* | * | ||||
* 0 A.D. is distributed in the hope that it will be useful, | * 0 A.D. is distributed in the hope that it will be useful, | ||||
▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | public: | ||||
/** | /** | ||||
* Push a task to be executed. | * Push a task to be executed. | ||||
*/ | */ | ||||
template<typename T> | template<typename T> | ||||
Future<std::invoke_result_t<T>> PushTask(T&& func, TaskPriority priority = TaskPriority::NORMAL) | Future<std::invoke_result_t<T>> PushTask(T&& func, TaskPriority priority = TaskPriority::NORMAL) | ||||
{ | { | ||||
Future<std::invoke_result_t<T>> ret; | Future<std::invoke_result_t<T>> ret; | ||||
DoPushTask(std::move(ret.Wrap(std::move(func))), priority); | DoPushTask(ret.Wrap(std::move(func)), priority); | ||||
return ret; | return ret; | ||||
} | } | ||||
private: | private: | ||||
TaskManager(size_t numberOfWorkers); | TaskManager(size_t numberOfWorkers); | ||||
void DoPushTask(std::function<void()>&& task, TaskPriority priority); | void DoPushTask(std::function<void()>&& task, TaskPriority priority); | ||||
class Impl; | class Impl; | ||||
std::unique_ptr<Impl> m; | std::unique_ptr<Impl> m; | ||||
}; | }; | ||||
} // namespace Threading | } // namespace Threading | ||||
#endif // INCLUDED_THREADING_TASKMANAGER | #endif // INCLUDED_THREADING_TASKMANAGER |
Wildfire Games · Phabricator