diff --git a/src/renderer/src/core/taskQueue.ts b/src/renderer/src/core/taskQueue.ts new file mode 100644 index 0000000..e791f7c --- /dev/null +++ b/src/renderer/src/core/taskQueue.ts @@ -0,0 +1,46 @@ +import { ref } from 'vue'; +import { v4 as uuidv4 } from 'uuid'; + +interface Task { + id: string; + executeTime: number; + taskFunction: () => void; +} + +const taskQueue = ref([]); +const intervalId = ref(null); + +const addTask = (executeTime: number, taskFunction: () => void) => { + const task: Task = { + id: uuidv4(), + executeTime, + taskFunction, + }; + taskQueue.value.push(task); + taskQueue.value.sort((a, b) => a.executeTime - b.executeTime); +}; + +const checkTasks = () => { + const now = new Date().getTime(); + while (taskQueue.value.length > 0 && taskQueue.value[0].executeTime <= now) { + const task = taskQueue.value.shift(); + if (task) { + task.taskFunction(); + } + } +}; + +const startTaskQueue = () => { + if (!intervalId.value) { + intervalId.value = window.setInterval(checkTasks, 200); + } +}; + +const stopTaskQueue = () => { + if (intervalId.value) { + clearInterval(intervalId.value); + intervalId.value = null; + } +}; + +export { addTask, startTaskQueue, stopTaskQueue }; diff --git a/src/renderer/src/views/PlayerView.vue b/src/renderer/src/views/PlayerView.vue index d632db1..648d0aa 100644 --- a/src/renderer/src/views/PlayerView.vue +++ b/src/renderer/src/views/PlayerView.vue @@ -1,32 +1,12 @@ -