From a453e53a14415da990f299d108ebe47c74586603 Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Sun, 7 Sep 2025 01:20:01 +0300 Subject: [PATCH] Task interface --- .../multitasking_0/SingleThreadEventLoop.kt | 24 +++++++++++++++++++ .../ru/landgrafhomyak/multitasking_0/Task.kt | 20 ++++++++++++++++ .../multitasking_0/TaskKernel.kt | 5 ++++ 3 files changed, 49 insertions(+) create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/Task.kt create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/TaskKernel.kt diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/SingleThreadEventLoop.kt b/src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/SingleThreadEventLoop.kt index 90149b1..623d789 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/SingleThreadEventLoop.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/SingleThreadEventLoop.kt @@ -1,6 +1,30 @@ package ru.landgrafhomyak.multitasking_0 public interface SingleThreadEventLoop { + /** + * Returns thread on which this event loop runs. + * Threadsafe getter. + */ + public val thread: Thread + + /** + * Returns `true` if event loop running now. + * Threadsafe getter. + * + * Value `false` means that [runUntilSuspended()][SingleThreadEventLoop.runUntilSuspended] can be called. + */ + public val isRunning: Boolean + + /** + * Adds [task][kernel] to scheduler's queue. + * Returns immediately. Threadsafe. + */ + public fun addTask(kernel: TaskKernel): Task + + /** + * Schedules [continuation.resumeWithSuccess(Unit)][Continuation.resumeWithSuccess] to be called after [delayMillis] milliseconds. + * Threadsafe. + */ public fun callAfter(delayMillis: Long, continuation: Continuation) public fun yield(handler: ContinuationHandler>): R diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/Task.kt b/src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/Task.kt new file mode 100644 index 0000000..d2a440c --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/Task.kt @@ -0,0 +1,20 @@ +package ru.landgrafhomyak.multitasking_0 + +public interface Task { + public val name: String + public val eventLoop: SingleThreadEventLoop + + public fun cancel() + + + public val state: State + public val exception: Throwable + + public enum class State { + PENDING, + RUNNING, + WAITING, + FINISHED_SUCCESSFULLY, + FINISHED_WITH_ERROR + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/TaskKernel.kt b/src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/TaskKernel.kt new file mode 100644 index 0000000..ddaa60b --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/multitasking_0/TaskKernel.kt @@ -0,0 +1,5 @@ +package ru.landgrafhomyak.multitasking_0 + +public fun interface TaskKernel { + public fun run(task: Task) +} \ No newline at end of file