h-gtk/utils: Use a threadpool to avoid spawning a million threads

This commit is contained in:
Jordan Petridis 2018-03-29 10:24:02 +03:00
parent 88cc7e6fec
commit 8703470010
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
2 changed files with 5 additions and 4 deletions

View File

@ -26,15 +26,14 @@ extern crate hammond_downloader;
extern crate humansize;
extern crate loggerv;
extern crate open;
extern crate rayon;
extern crate regex;
extern crate reqwest;
extern crate send_cell;
extern crate serde_json;
extern crate take_mut;
extern crate url;
// extern crate rayon;
// use rayon::prelude::*;
use log::Level;
use gtk::prelude::*;

View File

@ -7,6 +7,7 @@ use gtk;
use gtk::prelude::*;
use failure::Error;
use rayon;
use regex::Regex;
use reqwest;
use send_cell::SendCell;
@ -132,6 +133,7 @@ fn refresh_feed(source: Option<Vec<Source>>, sender: Sender<Action>) -> Result<(
lazy_static! {
static ref CACHED_PIXBUFS: RwLock<HashMap<(i32, u32), Mutex<SendCell<Pixbuf>>>> =
{ RwLock::new(HashMap::new()) };
static ref THREADPOOL: rayon::ThreadPool = rayon::ThreadPoolBuilder::new().build().unwrap();
}
// Since gdk_pixbuf::Pixbuf is refference counted and every episode,
@ -161,12 +163,12 @@ pub fn set_image_from_path(
let (sender, receiver) = channel();
let pd_ = pd.clone();
thread::spawn(move || {
THREADPOOL.spawn(move || {
sender.send(downloader::cache_image(&pd_)).unwrap();
});
let image = image.clone();
gtk::timeout_add(200, move || {
gtk::timeout_add(50, move || {
if let Ok(path) = receiver.try_recv() {
if let Ok(path) = path {
if let Ok(px) =