Created
August 24, 2012 17:32
-
-
Save jgranick/3453231 to your computer and use it in GitHub Desktop.
How to set and retrieve the same value between threads (NME recipe)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cpp.vm.Mutex; | |
import cpp.vm.Thread; | |
import nme.display.Sprite; | |
import nme.Lib; | |
class ThreadingExample extends Sprite { | |
public function new () { | |
super (); | |
var data = new ShareData (); | |
var first = Thread.create (setValue); | |
var second = Thread.create (retrieveValue); | |
first.sendMessage (data); | |
second.sendMessage (data); | |
} | |
private function setValue ():Void { | |
var data = Thread.readMessage (true); | |
data.value = 100; | |
} | |
private function retrieveValue ():Void { | |
var data = Thread.readMessage (true); | |
trace ("The value is " + data.value); | |
} | |
} | |
class ShareData { | |
public var value (getValue, setValue):Int; | |
private var mutex:Mutex; | |
public function new () { | |
mutex = new Mutex (); | |
} | |
private function getValue ():Int { | |
mutex.acquire (); | |
var result = value; | |
mutex.release (); | |
return result; | |
} | |
private function setValue (newValue:Int):Int { | |
mutex.acquire (); | |
value = newValue; | |
mutex.release (); | |
return newValue; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment