Files
Nim/tests/generics/tthread_generic.nim
ringabout f6dc30e52d fixes Thread initializer for ARC/ORC on Macos (#20368)
* fixes Thread initializer for ARC/ORC

* another try

* fix

* use int
2022-09-16 16:35:53 -04:00

40 lines
925 B
Nim

discard """
matrix: "--mm:refc; --mm:orc"
action: compile
"""
type
ThreadFuncArgs[T] = object of RootObj
a: proc(): T {.thread.}
b: proc(val: T) {.thread.}
proc handleThreadFunc(arg: ThreadFuncArgs[int]){.thread.} =
var fn = arg.a
var callback = arg.b
var output = fn()
callback(output)
proc `@||->`*[T](fn: proc(): T {.thread.},
callback: proc(val: T){.thread.}): Thread[ThreadFuncArgs[T]] =
var thr: Thread[ThreadFuncArgs[T]]
var args: ThreadFuncArgs[T]
args.a = fn
args.b = callback
createThread(thr, handleThreadFunc, args)
return thr
proc `||->`*[T](fn: proc(): T{.thread.}, callback: proc(val: T){.thread.}) =
discard fn @||-> callback
when true:
import os
proc testFunc(): int {.thread.} =
return 1
proc callbackFunc(val: int) {.thread.} =
echo($(val))
var thr = (testFunc @||-> callbackFunc)
echo("test")
joinThread(thr)
os.sleep(3000)