diff options
Diffstat (limited to 'tests/accept/compile/tthread_generic.nim')
-rw-r--r-- | tests/accept/compile/tthread_generic.nim | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/accept/compile/tthread_generic.nim b/tests/accept/compile/tthread_generic.nim new file mode 100644 index 000000000..4ef939408 --- /dev/null +++ b/tests/accept/compile/tthread_generic.nim @@ -0,0 +1,35 @@ +type + TThreadFuncArgs[T] = object of TObject + a: proc(): T {.thread.} + b: proc(val: T) {.thread.} + +proc handleThreadFunc(arg: TThreadFuncArgs[int]){.thread.} = + var func = arg.a + var callback = arg.b + var output = func() + callback(output) + +proc `@||->`*[T](func: proc(): T {.thread.}, + callback: proc(val: T){.thread.}): TThread[TThreadFuncArgs[T]] = + var thr: TThread[TThreadFuncArgs[T]] + var args: TThreadFuncArgs[T] + args.a = func + args.b = callback + createThread(thr, handleThreadFunc, args) + return thr + +proc `||->`*[T](func: proc(): T{.thread.}, callback: proc(val: T){.thread.}) = + discard func @||-> callback + +when isMainModule: + 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) + |