问题描述
我正在这里探索可能性。是否可以通过继承父项的titleTemplate来实现类似的目的?
use std::thread; use std::time::{Duration}; use std::sync::Arc; use crossbeam::queue::SegQueue; use parking_lot::{Mutex,MutexGuard}; struct ReadySignal { client_id: usize,client: Arc<Mutex<Client>>,section: usize,} struct Client { id: usize,file: Vec<usize>,} fn main() { let max_clients = 10; let file_size = 1000; let req_q = Arc::new(SegQueue::new()); let v: Vec<Arc<Mutex<Client>>> = Vec::new(); let client_arr = Arc::new(Mutex::new(v)); let client_arr_c = Arc::clone(&client_arr); thread::spawn(move || { loop { thread::sleep(Duration::from_millis(10)); let mut display = String::new(); let client_arr_c = client_arr_c.lock(); for (_ii,i) in client_arr_c.iter().enumerate() { let client = i.lock(); let total = client.file.len(); let mut done = 0; for j in client.file.iter() { if *j == 1 { done += 1; } } let percentage = (done as f64/total as f64) * 100.0; let client_per: String = format!("Client {}: {:.2}%\n",client.id,percentage); MutexGuard::unlock_fair(client); display += &client_per; } MutexGuard::unlock_fair(client_arr_c); println!("\x1B[2J\x1B[1;1H{}",display); } }); let client_arr_c = Arc::clone(&client_arr); std::thread::spawn(move || { for i in 0..max_clients { thread::sleep(Duration::from_millis(1000)); let mut file_init = 0; if i == 0 { file_init = 1; } let client_id = i + 1; let client = Arc::new(Mutex::new(Client{ id: client_id,file: vec![file_init;file_size],})); let clientc = Arc::clone(&client); let req_qc = Arc::clone(&req_q); thread::spawn(move || { for j in 0..file_size { thread::sleep(Duration::from_millis(10)); let clientcc = clientc.lock(); if clientcc.file[j] == 0 { let req = ReadySignal{ client_id,client: Arc::clone(&clientc),section: j,}; MutexGuard::unlock_fair(clientcc); req_qc.push(req); continue; } } }); let clientc = Arc::clone(&client); let req_qc = Arc::clone(&req_q); thread::spawn(move || { loop { thread::sleep(Duration::from_millis(20)); let req = match req_qc.pop() { Err(_) => continue,Ok(x) => x,}; let (clientc,mut req_client) = match client_id.cmp(&req.client_id) { std::cmp::Ordering::Less => { let a = clientc.lock(); let b = req.client.lock(); (a,b) } std::cmp::Ordering::Greater => { let b = req.client.lock(); let a = clientc.lock(); (a,b) } std::cmp::Ordering::Equal => { req_qc.push(req); continue; } }; if clientc.file[req.section] == 1 { req_client.file[req.section] = 1; MutexGuard::unlock_fair(req_client); MutexGuard::unlock_fair(clientc); } else { MutexGuard::unlock_fair(req_client); MutexGuard::unlock_fair(clientc); req_qc.push(req); } } }); let clientc = Arc::clone(&client); client_arr_c.lock().push(clientc); } }); loop { thread::sleep(Duration::from_millis(1000)); } }
@H_502_5@当我尝试做这样的事情时,子titleTemplate似乎超过了父项的所有规则。您的titleTemplate中是否有要引用的变量?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)