Use the select! macro in ImageCacheThread.

This commit is contained in:
Ms2ger 2016-03-07 14:13:31 +01:00
parent 6de127a343
commit 9c4f2265d0

View file

@ -18,7 +18,7 @@ use std::fs::File;
use std::io::Read; use std::io::Read;
use std::mem; use std::mem;
use std::sync::Arc; use std::sync::Arc;
use std::sync::mpsc::{Receiver, Select, Sender, channel}; use std::sync::mpsc::{Receiver, Sender, channel};
use url::Url; use url::Url;
use util::resource_files::resources_dir_path; use util::resource_files::resources_dir_path;
use util::thread::spawn_named; use util::thread::spawn_named;
@ -335,26 +335,20 @@ impl ImageCache {
loop { loop {
let result = { let result = {
let sel = Select::new(); let cmd_receiver = &self.cmd_receiver;
let progress_receiver = &self.progress_receiver;
let decoder_receiver = &self.decoder_receiver;
let mut cmd_handle = sel.handle(&self.cmd_receiver); select! {
let mut progress_handle = sel.handle(&self.progress_receiver); msg = cmd_receiver.recv() => {
let mut decoder_handle = sel.handle(&self.decoder_receiver); SelectResult::Command(msg.unwrap())
},
unsafe { msg = decoder_receiver.recv() => {
cmd_handle.add(); SelectResult::Decoder(msg.unwrap())
progress_handle.add(); },
decoder_handle.add(); msg = progress_receiver.recv() => {
} SelectResult::Progress(msg.unwrap())
}
let ret = sel.wait();
if ret == cmd_handle.id() {
SelectResult::Command(self.cmd_receiver.recv().unwrap())
} else if ret == decoder_handle.id() {
SelectResult::Decoder(self.decoder_receiver.recv().unwrap())
} else {
SelectResult::Progress(self.progress_receiver.recv().unwrap())
} }
}; };