lunlumo #7114(2008/08/12 12:22 GMT) [ Scala ] Rating0/0=0.00
scala.concurrentを使って書いてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
import scala.concurrent.Lock import scala.concurrent.ops.spawn object Main extends Application { var l:Lock = new Lock var r:Boolean = true var q:Boolean = false def watch:Unit = { var rec:Boolean = true try { l.acquire if (Console.in.ready) { Console.readLine.charAt(0) match { case 'q' => { r = false q = true rec = false } case 'p' => r = !r case _ => Console.println("p[ENTER] :pause/resume\nq[ENTER] :quit") } } } catch { case e:StringIndexOutOfBoundsException => () case e:Exception => { e.printStackTrace r = false q = true rec = false } } finally { l.release } if (rec) { Thread.sleep(100) watch } } def write:Unit = { var rec:Boolean = true try { l.acquire if (r) Console.print('a') rec = !q } finally { l.release } if (rec) { Thread.sleep(1000) write } } spawn(watch) spawn(write) }
Rating0/0=0.00-0+
[ reply ]
lunlumo #7114() [ Scala ] Rating0/0=0.00
scala.concurrentを使って書いてみました。
import scala.concurrent.Lock import scala.concurrent.ops.spawn object Main extends Application { var l:Lock = new Lock var r:Boolean = true var q:Boolean = false def watch:Unit = { var rec:Boolean = true try { l.acquire if (Console.in.ready) { Console.readLine.charAt(0) match { case 'q' => { r = false q = true rec = false } case 'p' => r = !r case _ => Console.println("p[ENTER] :pause/resume\nq[ENTER] :quit") } } } catch { case e:StringIndexOutOfBoundsException => () case e:Exception => { e.printStackTrace r = false q = true rec = false } } finally { l.release } if (rec) { Thread.sleep(100) watch } } def write:Unit = { var rec:Boolean = true try { l.acquire if (r) Console.print('a') rec = !q } finally { l.release } if (rec) { Thread.sleep(1000) write } } spawn(watch) spawn(write) }Rating0/0=0.00-0+
[ reply ]