h-gtk/utils: Use a threadpool to avoid spawning a million threads
This commit is contained in:
parent
88cc7e6fec
commit
8703470010
@ -26,15 +26,14 @@ extern crate hammond_downloader;
|
|||||||
extern crate humansize;
|
extern crate humansize;
|
||||||
extern crate loggerv;
|
extern crate loggerv;
|
||||||
extern crate open;
|
extern crate open;
|
||||||
|
extern crate rayon;
|
||||||
extern crate regex;
|
extern crate regex;
|
||||||
extern crate reqwest;
|
extern crate reqwest;
|
||||||
extern crate send_cell;
|
extern crate send_cell;
|
||||||
extern crate serde_json;
|
extern crate serde_json;
|
||||||
extern crate take_mut;
|
extern crate take_mut;
|
||||||
extern crate url;
|
extern crate url;
|
||||||
// extern crate rayon;
|
|
||||||
|
|
||||||
// use rayon::prelude::*;
|
|
||||||
use log::Level;
|
use log::Level;
|
||||||
|
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
|
|||||||
@ -7,6 +7,7 @@ use gtk;
|
|||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
|
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
use rayon;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use reqwest;
|
use reqwest;
|
||||||
use send_cell::SendCell;
|
use send_cell::SendCell;
|
||||||
@ -132,6 +133,7 @@ fn refresh_feed(source: Option<Vec<Source>>, sender: Sender<Action>) -> Result<(
|
|||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref CACHED_PIXBUFS: RwLock<HashMap<(i32, u32), Mutex<SendCell<Pixbuf>>>> =
|
static ref CACHED_PIXBUFS: RwLock<HashMap<(i32, u32), Mutex<SendCell<Pixbuf>>>> =
|
||||||
{ RwLock::new(HashMap::new()) };
|
{ RwLock::new(HashMap::new()) };
|
||||||
|
static ref THREADPOOL: rayon::ThreadPool = rayon::ThreadPoolBuilder::new().build().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Since gdk_pixbuf::Pixbuf is refference counted and every episode,
|
// 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 (sender, receiver) = channel();
|
||||||
let pd_ = pd.clone();
|
let pd_ = pd.clone();
|
||||||
thread::spawn(move || {
|
THREADPOOL.spawn(move || {
|
||||||
sender.send(downloader::cache_image(&pd_)).unwrap();
|
sender.send(downloader::cache_image(&pd_)).unwrap();
|
||||||
});
|
});
|
||||||
|
|
||||||
let image = image.clone();
|
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) = receiver.try_recv() {
|
||||||
if let Ok(path) = path {
|
if let Ok(path) = path {
|
||||||
if let Ok(px) =
|
if let Ok(px) =
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user