use std::sync::mpsc::{Sender, Receiver};
use std::sync::mpsc;
use std::{thread, time};
use chrono::prelude::*;
fn main() {
println!("- - - - -");
let (tx, rx): (Sender<i32>, Receiver<i32>) = mpsc::channel();
let mut children = Vec::new();
let mut ids = Vec::new(); // собираем все сообщения сюда;
let mut thd_1: Vec<DateTime<Local>> = vec![]; // собираем все временные_значения_t для конкретного потока;
let mut thd_2: Vec<DateTime<Local>> = vec![];
let mut thd_3: Vec<DateTime<Local>> = vec![];
for id in 1..4 { // создаю три потока;
let thread_tx = tx.clone();
let child = thread::spawn(move || {
for i in 1..6 {
let t: DateTime<Local> = Local::now();
if id == 1 {
thd_1.push(t);
}
if id == 2 {
thd_2.push(t);
}
if id == 3 {
thd_3.push(t);
}
if i == 5 {
thread_tx.send(id).unwrap(); // чтобы отправить сообщение только по окончании работы потока;
}
println!("{:?}_ поток, задача _{:?}, время: {:?}", id, i, t);
thread::sleep(time::Duration::from_millis(3));
}
});
children.push(child);
}
for _ in 1..4 {
ids.push(rx.recv());
}
for child in children {
child.join().expect("Дочерний поток паникует");
}
// порядок, с которым сообщения были отправлeны:
println!("{:?}", ids);
//
println!("thd_1 = {:?}", thd_1);
println!("thd_2 = {:?}", thd_2);
println!("thd_3 = {:?}", thd_3);
//
println!("- - - - -");
}
use chrono::prelude::*;
use std::sync::mpsc;
use std::sync::mpsc::{Receiver, Sender};
use std::{thread, time};
fn main() {
println!("- - - - -");
let mut children = Vec::with_capacity(3);
for id in 0..children.capacity() {
let child = thread::spawn(move || {
let mut date_times = Vec::with_capacity(5);
for i in 0..date_times.capacity() {
let t: DateTime<Local> = Local::now();
date_times.push(t);
println!("{:?}_ поток, задача _{:?}, время: {:?}", id, i, t);
thread::sleep(time::Duration::from_millis(3));
}
(id, date_times)
});
children.push(child);
}
for child in children {
let (id, date_times) = child.join().expect("Дочерний поток паникует");
println!("thd_{} = {:?}", id, date_times);
}
println!("- - - - -");
}