GCD usage example.
This commit is contained in:
committed by
Nikolay Igotti
parent
d33afd6007
commit
ece39a27d8
@@ -3,6 +3,8 @@ import platform.AppKit.*
|
||||
import platform.Foundation.*
|
||||
import platform.objc.*
|
||||
import platform.osx.*
|
||||
import platform.darwin.*
|
||||
import platform.posix.*
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
autoreleasepool {
|
||||
@@ -20,9 +22,29 @@ private fun runApp() {
|
||||
app.run()
|
||||
}
|
||||
|
||||
data class Data(val stamp: Long)
|
||||
|
||||
private class Controller : NSObject() {
|
||||
private val asyncQueue = dispatch_queue_create("com.jetbrains.CustomQueue", null)
|
||||
|
||||
@ObjCAction
|
||||
fun onClick() {
|
||||
// Execute some async action on button click.
|
||||
dispatch_async_f(asyncQueue, konan.worker.detachObjectGraph {
|
||||
Data(clock_gettime_nsec_np(CLOCK_REALTIME))
|
||||
}, staticCFunction {
|
||||
it ->
|
||||
initRuntimeIfNeeded()
|
||||
val data = konan.worker.attachObjectGraph<Data>(it)
|
||||
println("in async: $data")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
private class MyAppDelegate() : NSObject(), NSApplicationDelegateProtocol {
|
||||
|
||||
private val window: NSWindow
|
||||
private val controller = Controller()
|
||||
|
||||
init {
|
||||
val mainDisplayRect = NSScreen.mainScreen()!!.frame
|
||||
@@ -33,6 +55,7 @@ private class MyAppDelegate() : NSObject(), NSApplicationDelegateProtocol {
|
||||
size.width * 0.5,
|
||||
size.height * 0.5
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
val windowStyle = NSWindowStyleMaskTitled or NSWindowStyleMaskMiniaturizable or
|
||||
@@ -54,6 +77,13 @@ private class MyAppDelegate() : NSObject(), NSApplicationDelegateProtocol {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val button = NSButton().initWithFrame(NSMakeRect(10.0, 10.0, 100.0, 40.0)).apply {
|
||||
title = "Press me"
|
||||
target = controller
|
||||
action = NSSelectorFromString("onClick")
|
||||
}
|
||||
window.contentView!!.addSubview(button)
|
||||
}
|
||||
|
||||
override fun applicationWillFinishLaunching(notification: NSNotification) {
|
||||
|
||||
Reference in New Issue
Block a user