FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
task_queue.cpp
Go to the documentation of this file.
1// Copyright 2024 Arthur Sonzogni. Todos los derechos reservados.
2// El uso de este código fuente se rige por la licencia MIT que se puede encontrar en
3// el archivo 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 // Intenta ejecutar una tarea inmediatamente.
24 if (!immediate_tasks_.empty()) {
25 auto task = immediate_tasks_.front();
26 immediate_tasks_.pop();
27 return task.task;
28 }
29
30 // Mueve todas las tareas que se pueden ejecutar a la cola inmediata.
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 // Intenta ejecutar una tarea inmediatamente.
38 if (!immediate_tasks_.empty()) {
39 auto task = immediate_tasks_.front();
40 immediate_tasks_.pop();
41 return task.task;
42 }
43
44 // Si no hay tareas para ejecutar, devuelve el retraso hasta la próxima tarea.
45 if (!delayed_tasks_.empty()) {
46 return delayed_tasks_.top().time.value() - now;
47 }
48
49 // Si no hay tareas para ejecutar, devuelve la duración máxima.
50 return std::monostate{};
51}
52
53} // namespace ftxui::task
auto Get() -> MaybeTask
std::variant< Task, std::chrono::steady_clock::duration, std::monostate > MaybeTask
auto PostTask(PendingTask task) -> void
Definition task_queue.cpp:8