Advertisement
Guest User

Untitled

a guest
Aug 30th, 2015
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.76 KB | None | 0 0
  1. import os, threadpool
  2.  
  3. proc spawnBackgroundJob[T](channel: ptr Channel[T], f: iterator (): T) =
  4.  
  5. type Args = tuple[iter: iterator (): T, channel: ptr Channel[T]]
  6.  
  7. proc threadFunc(args: Args) {.thread.} =
  8. echo "Thread is starting"
  9. let iter = args.iter
  10. var channel = args.channel # note: still a `ptr Channel`
  11.  
  12. for i in iter():
  13. echo "Sending ", i
  14. channel[].send(i)
  15.  
  16. channel[].open()
  17.  
  18. var thread: Thread[Args]
  19. let args = (f, channel)
  20. createThread(thread, threadFunc, args)
  21.  
  22.  
  23. # example use in some main thread:
  24. iterator testJob(): int {.closure.} =
  25. yield 0
  26. sleep(500)
  27. yield 1
  28. sleep(500)
  29. yield 2
  30.  
  31.  
  32. var channel: Channel[int]
  33. spawnBackgroundJob(channel.addr, testJob)
  34.  
  35. for i in 1 .. 10:
  36. sleep(200)
  37. echo channel.peek()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement