微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一种方法可以层叠titleTemplate?

如何解决有没有一种方法可以层叠titleTemplate?

我正在这里探索可能性。是否可以通过继承父项的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));
    }
}

当我尝试做这样的事情时,子titleTemplate似乎超过了父项的所有规则。您的titleTemplate中是否有要引用的变量?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。