Guest User

Untitled

a guest
May 20th, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. object Scheduler {
  2. private lazy val sched = Executors.newSingleThreadedScheduledExecutor();
  3. def schedule(f: => Unit, long time) {
  4. sched.schedule(new Runnable {
  5. def run = {
  6. actors.Scheduler.execute(f)
  7. }
  8. }, time - Platform.currentTime, TimeUnit.MILLISECONDS);
  9. }
  10. }
  11.  
  12. val execTime = //...
  13. Scheduler.schedule( { Actor.actor { target ! message }; () }, execTime)
  14.  
  15. import actors.{Actor,TIMEOUT}
  16.  
  17. def scheduler(time: Long)(f: => Unit) = {
  18. def fixedRateLoop {
  19. Actor.reactWithin(time) {
  20. case TIMEOUT => f; fixedRateLoop
  21. case 'stop =>
  22. }
  23. }
  24. Actor.actor(fixedRateLoop)
  25. }
  26.  
  27. case class Ping(t: Long)
  28.  
  29. import Actor._
  30. val test = actor { loop {
  31. receiveWithin(3000) {
  32. case Ping(t) => println(t/1000)
  33. case TIMEOUT => println("TIMEOUT")
  34. case 'stop => exit
  35. }
  36. } }
  37.  
  38. import compat.Platform.currentTime
  39. val sched = scheduler(2000) { test ! Ping(currentTime) }
  40.  
  41. scala> 1249383399
  42. 1249383401
  43. 1249383403
  44. 1249383405
  45. 1249383407
  46.  
  47. sched ! 'stop
  48.  
  49. scala> TIMEOUT
  50. TIMEOUT
  51. TIMEOUT
  52.  
  53. test ! 'stop
  54.  
  55. def run = actors.Scheduler.execute(f)
  56.  
  57. def run = f
  58.  
  59. object Scheduler {
  60. private lazy val sched = Executors.newSingleThreadedScheduledExecutor();
  61. def schedule(f: => Unit, time: Long) {
  62. sched.schedule(new Runnable {
  63. def run = f
  64. }, time - Platform.currentTime, TimeUnit.MILLISECONDS);
  65. }
  66. }
Add Comment
Please, Sign In to add comment