Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2018
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 1.05 KB | None | 0 0
  1.  
  2.  
  3. import os, threadpool
  4.  
  5.  
  6. proc p1(cancelChan: ptr Channel[bool]):bool=
  7.     result = true
  8.     for i in countup(0,50):
  9.         echo "p1 Doing action"
  10.         sleep(1000)
  11.         let (hasData, msg) = cancelChan[].tryRecv()
  12.         if msg == true:
  13.             echo "Cancelling p1"
  14.             return
  15.     echo "Done p1..."
  16.  
  17. # proc p2(cancelChan: ptr Channel[bool]): bool =
  18. #     result = true
  19. #     for i in countup(0,5):
  20. #         echo "p2 Doing action"
  21. #         sleep(1000)
  22. #         let (hasData, msg) = cancelChan[].tryRecv()
  23.  
  24. #         if msg == true:
  25. #             echo "Cancelling p1"
  26. #             return
  27. #     echo "Done p2"
  28.        
  29.  
  30. proc timeoutable(p:proc, timeout=10)=
  31.     var cancelChan: Channel[bool]
  32.     var t:  Thread[ptr Channel[bool]]
  33.     cancelChan.open()
  34.     createThread[ptr Channel[bool]](t, p, (cancelChan.addr))
  35.  
  36.     for i in countup(0, timeout):
  37.         if t.isReady():
  38.             return
  39.         sleep(1000)
  40.    
  41.     cancelChan.send(true)
  42.  
  43. when isMainModule:
  44.     timeoutable(p1)
  45.     # timeoutable(p2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement