34 lines
932 B
Kotlin
34 lines
932 B
Kotlin
package net.sergeych.synctools
|
|
|
|
import kotlinx.coroutines.TimeoutCancellationException
|
|
import kotlinx.coroutines.channels.Channel
|
|
import kotlinx.coroutines.runBlocking
|
|
import kotlinx.coroutines.withTimeout
|
|
|
|
@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
|
actual class WaitHandle {
|
|
private val channel = Channel<Unit>()
|
|
actual fun await(milliseconds: Long): Boolean {
|
|
return runBlocking {
|
|
try {
|
|
if( milliseconds > 0) {
|
|
withTimeout(milliseconds) {
|
|
channel.receive()
|
|
true
|
|
}
|
|
}
|
|
else {
|
|
channel.receive()
|
|
true
|
|
}
|
|
}
|
|
catch(_: TimeoutCancellationException) {
|
|
false
|
|
}
|
|
}
|
|
}
|
|
|
|
actual fun wakeUp() {
|
|
runBlocking { channel.send(Unit) }
|
|
}
|
|
} |