diff options
Diffstat (limited to 'src/library/scala/concurrent/Process.scala')
-rw-r--r-- | src/library/scala/concurrent/Process.scala | 109 |
1 files changed, 57 insertions, 52 deletions
diff --git a/src/library/scala/concurrent/Process.scala b/src/library/scala/concurrent/Process.scala index 5f1f67cad0..ee17bf7cf1 100644 --- a/src/library/scala/concurrent/Process.scala +++ b/src/library/scala/concurrent/Process.scala @@ -1,78 +1,83 @@ /* __ *\ ** ________ ___ / / ___ Scala API ** -** / __/ __// _ | / / / _ | (c) 2003-04, LAMP/EPFL ** +** / __/ __// _ | / / / _ | (c) 2003-2006, LAMP/EPFL ** ** __\ \/ /__/ __ |/ /__/ __ | ** ** /____/\___/_/ |_/____/_/ | | ** ** |/ ** -** $Id$ \* */ +// $Id$ + package scala.concurrent; object Process { - def spawn(body: => Unit): Process = { - val p = new Process(body); - p.start(); - p; - } - def spawn_link(body: => Unit): Process = { - self.spawn_link(body); - } - def send(p: Process,msg: MailBox#Message) = - p.send(msg); - def receive[a](f: PartialFunction[MailBox#Message, a]): a = - self.receive(f); + def spawn(body: => Unit): Process = { + val p = new Process(body); + p.start(); + p + } - def receiveWithin[a](msec: long)(f: PartialFunction[MailBox#Message, a]): a = - self.receiveWithin(msec)(f); + def spawn_link(body: => Unit): Process = + self.spawn_link(body); - def self: Process = { - if (Thread.currentThread().isInstanceOf[Process]) - Thread.currentThread().asInstanceOf[Process] - else error("Self called outside a process"); - } + def send(p: Process, msg: MailBox#Message) = + p.send(msg); + + def receive[a](f: PartialFunction[MailBox#Message, a]): a = + self.receive(f); + + def receiveWithin[a](msec: long)(f: PartialFunction[MailBox#Message, a]): a = + self.receiveWithin(msec)(f); + + def self: Process = + if (Thread.currentThread().isInstanceOf[Process]) + Thread.currentThread().asInstanceOf[Process] + else + error("Self called outside a process"); + + def exit(p: Process, reason: AnyRef) = + p.exit(reason); - def exit(p: Process, reason: AnyRef) = - p.exit(reason); } class Process(body: => Unit) extends Actor() { - private var exitReason: AnyRef = null; - private var links: List[Process] = Nil; - override def run() = { - try {body} - catch { - case _: java.lang.InterruptedException => - signal(exitReason); - case (exitSignal) => - signal(exitSignal); - } - } + private var exitReason: AnyRef = null; + private var links: List[Process] = Nil; - private def signal(s: MailBox#Message) = { - links.foreach((p:Process) => p.send(Tuple3('EXIT,this,s))); + override def run() = + try { + body } + catch { + case _: java.lang.InterruptedException => + signal(exitReason) + case (exitSignal) => + signal(exitSignal) + }; - def !(msg: MailBox#Message) = - send(msg); + private def signal(s: MailBox#Message) = + links.foreach(p: Process => p.send(Triple('EXIT, this, s))); - def link(p: Process) = { - links = p::links; - } + def !(msg: MailBox#Message) = + send(msg); - def spawn_link(body: => Unit) = { - val p = new Process(body); - p.link(this); - p.start(); - p - } + def link(p: Process) = + links = p::links; - //def self = this; + def spawn_link(body: => Unit) = { + val p = new Process(body); + p.link(this); + p.start(); + p + } + + //def self = this; + + def exit(reason: AnyRef): Unit = { + exitReason = reason; + interrupt() + } - def exit(reason: AnyRef): Unit = { - exitReason = reason; - interrupt(); - } } |