载入中...
搜索中...
未找到
EditingTaskService.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
6
7#include <atomic>
8#include <chrono>
9#include <condition_variable>
10#include <deque>
11#include <functional>
12#include <memory>
13#include <mutex>
14#include <string>
15#include <thread>
16#include <unordered_map>
17
18namespace eve::editing {
19
22
26 std::string name;
28 float progress = 0.0F;
30 std::vector<Diagnostic> diagnostics;
31};
32
35public:
37 bool isCancellationRequested() const;
39 void reportProgress(float progress) const;
40
41private:
42 friend class TaskService;
43 TaskContext(std::shared_ptr<std::atomic_bool> cancelled, std::function<void(float)> progress);
44 std::shared_ptr<std::atomic_bool> cancelled_;
45 std::function<void(float)> progress_;
46};
47
50 Status status = Status::Applied;
52 std::vector<Diagnostic> diagnostics;
53};
54
63public:
64 using Work = std::function<TaskOutcome(const TaskContext&)>;
65
70 TaskService(const TaskService&) = delete;
72
74 [[nodiscard]] Result<TaskId> submit(std::string name, Work work);
76 [[nodiscard]] Result<void> cancel(const TaskId& task);
78 [[nodiscard]] Result<TaskSnapshot> snapshot(const TaskId& task) const;
80 [[nodiscard]] Result<void> waitIdle(std::chrono::milliseconds timeout);
81
82private:
83 struct TaskRecord;
84 void workerLoop();
85
86 mutable std::mutex mutex_;
87 std::condition_variable workReady_;
88 std::condition_variable idle_;
89 std::unordered_map<TaskId, std::shared_ptr<TaskRecord>, StrongIdHash<TaskId>> tasks_;
90 std::deque<std::shared_ptr<TaskRecord>> queue_;
91 std::thread worker_;
92 bool stopping_ = false;
93 std::uint64_t sequence_ = 0;
94};
95
96} // namespace eve::editing
#define EVENGINE_API_PLATFORM
Definition Export.h:107
std::string name
Move-only operation result carrying either a value or Status.
Definition Result.h:155
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
Cooperative cancellation and progress API passed to worker code.
Single-worker background queue shared by editor domains.
std::function< TaskOutcome(const TaskContext &)> Work
TaskService(const TaskService &)=delete
TaskService & operator=(const TaskService &)=delete
Deterministic owning value tree shared by authoring hosts.
TaskState
Observable lifecycle of a background editor task.
StatusCode
Stable outcome category for an operation.
Definition Status.h:27
Hash functor for a strong authoring identifier.
Definition EditingIds.h:23
Type-erased result produced by a background editor task.
std::vector< Diagnostic > diagnostics
Immutable status returned to UI, scripts and automation clients.
std::vector< Diagnostic > diagnostics