forked from servo/servo
-
Notifications
You must be signed in to change notification settings - Fork 0
Code rust concurrency
Huon Wilson edited this page Nov 14, 2013
·
2 revisions
use std::cell::Cell;
use std::comm::SharedChan;
fn load_image(url: ~str) -> ~[u8] {
~[0, 1, 2]
}
// Object:
//fn load_image(url: ~str) -> ~[u8];
enum ImageLoaderMsg {
LoadImage(~str, Chan<~[u8]>),
Exit
}
fn main() {
let urlto_load = ~"foo.png";
let (port, chan) = stream::<ImageLoaderMsg>();
do spawn {
loop {
match port.recv() {
LoadImage(url, result_chan) => {
let image = load_image(url);
result_chan.send(image);
}
Exit => break
}
}
}
// make a load image request
let shared_chan = SharedChan::new(chan);
for _ in range(0, 10) {
let new_chan = shared_chan.clone();
do spawn {
let (result_port, result_chan) = stream();
new_chan.send(LoadImage(~"image.png", result_chan));
let image = result_port.recv();
println!("{:?}", image);
}
}
shared_chan.send(Exit);
}