implement QNWorker
This commit is contained in:
parent
ab276b517b
commit
7130eafc06
@ -85,6 +85,41 @@ impl<Task:Send+'static,Value:Clone+Send+'static> QRWorker<Task,Value>{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
QN = WorkerDescription{
|
||||||
|
input:Queued,
|
||||||
|
output:None(Single),
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
//None Output Worker does all its work internally from the perspective of the work submitter
|
||||||
|
pub struct QNWorker<Task:Send> {
|
||||||
|
sender: mpsc::Sender<Task>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<Task:Send+'static> QNWorker<Task>{
|
||||||
|
pub fn new<F:FnMut(Task)+Send+'static>(mut f:F)->Self{
|
||||||
|
let (sender,receiver)=mpsc::channel::<Task>();
|
||||||
|
let ret=Self {
|
||||||
|
sender,
|
||||||
|
};
|
||||||
|
thread::spawn(move ||{
|
||||||
|
loop {
|
||||||
|
match receiver.recv() {
|
||||||
|
Ok(task)=>f(task),
|
||||||
|
Err(_)=>{
|
||||||
|
println!("Worker stopping.",);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
pub fn send(&self,task:Task)->Result<(),mpsc::SendError<Task>>{
|
||||||
|
self.sender.send(task)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct CompatCRWorker<Task,Value:Clone,F>{
|
pub struct CompatCRWorker<Task,Value:Clone,F>{
|
||||||
data:std::marker::PhantomData<Task>,
|
data:std::marker::PhantomData<Task>,
|
||||||
f:F,
|
f:F,
|
||||||
@ -114,7 +149,7 @@ impl<Task,Value:Clone,F:FnMut(Task)->Value> CompatCRWorker<Task,Value,F>{
|
|||||||
fn test_worker() {
|
fn test_worker() {
|
||||||
println!("hiiiii");
|
println!("hiiiii");
|
||||||
// Create the worker thread
|
// Create the worker thread
|
||||||
let worker=CRWorker::new(crate::physics::Body::with_pva(crate::integer::Planar64Vec3::ZERO,crate::integer::Planar64Vec3::ZERO,crate::integer::Planar64Vec3::ZERO),
|
let worker=QRWorker::new(crate::physics::Body::with_pva(crate::integer::Planar64Vec3::ZERO,crate::integer::Planar64Vec3::ZERO,crate::integer::Planar64Vec3::ZERO),
|
||||||
|_|crate::physics::Body::with_pva(crate::integer::Planar64Vec3::ONE,crate::integer::Planar64Vec3::ONE,crate::integer::Planar64Vec3::ONE)
|
|_|crate::physics::Body::with_pva(crate::integer::Planar64Vec3::ONE,crate::integer::Planar64Vec3::ONE,crate::integer::Planar64Vec3::ONE)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user