Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os, threadpool
- proc spawnBackgroundJob[T](channel: ptr Channel[T], f: iterator (): T) =
- type Args = tuple[iter: iterator (): T, channel: ptr Channel[T]]
- proc threadFunc(args: Args) {.thread.} =
- echo "Thread is starting"
- let iter = args.iter
- var channel = args.channel # note: still a `ptr Channel`
- for i in iter():
- echo "Sending ", i
- channel[].send(i)
- channel[].open()
- var thread: Thread[Args]
- let args = (f, channel)
- createThread(thread, threadFunc, args)
- # example use in some main thread:
- iterator testJob(): int {.closure.} =
- yield 0
- sleep(500)
- yield 1
- sleep(500)
- yield 2
- var channel: Channel[int]
- spawnBackgroundJob(channel.addr, testJob)
- for i in 1 .. 10:
- sleep(200)
- echo channel.peek()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement