FTXUI 6.1.9
C++ functional terminal UI.
载入中...
搜索中...
未找到
task_queue.cpp
浏览该文件的文档.
1// 版权所有 2024 Arthur Sonzogni。保留所有权利。
2// 本源代码的使用受 MIT 许可证的约束,该许可证可在
3// LICENSE 文件中找到。
5
6namespace ftxui::task {
7
8auto TaskQueue::PostTask(PendingTask task) -> void {
9 if (!task.time) {
10 immediate_tasks_.push(task);
11 return;
12 }
13
14 if (task.time.value() < std::chrono::steady_clock::now()) {
15 immediate_tasks_.push(task);
16 return;
17 }
18
19 delayed_tasks_.push(task);
20}
21
23 // 尝试立即执行任务。
24 if (!immediate_tasks_.empty()) {
25 auto task = immediate_tasks_.front();
26 immediate_tasks_.pop();
27 return task.task;
28 }
29
30 // 将所有可执行任务移动到即时队列。
31 auto now = std::chrono::steady_clock::now();
32 while (!delayed_tasks_.empty() && delayed_tasks_.top().time.value() <= now) {
33 immediate_tasks_.push(delayed_tasks_.top());
34 delayed_tasks_.pop();
35 }
36
37 // 尝试立即执行任务。
38 if (!immediate_tasks_.empty()) {
39 auto task = immediate_tasks_.front();
40 immediate_tasks_.pop();
41 return task.task;
42 }
43
44 // 如果没有要执行的任务,则返回直到下一个任务的延迟。
45 if (!delayed_tasks_.empty()) {
46 return delayed_tasks_.top().time.value() - now;
47 }
48
49 // 如果没有要执行的任务,则返回最大持续时间。
50 return std::monostate{};
51}
52
53} // namespace ftxui::task
PendingTask 表示一个计划在特定时间或尽快执行的任务。
auto Get() -> MaybeTask
std::variant< Task, std::chrono::steady_clock::duration, std::monostate > MaybeTask
auto PostTask(PendingTask task) -> void