Skip to content

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);
}
Clone this wiki locally