diff options
Diffstat (limited to 'engine/src/work_queue.rs')
| -rw-r--r-- | engine/src/work_queue.rs | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/engine/src/work_queue.rs b/engine/src/work_queue.rs index 7226c7d..48cb2ff 100644 --- a/engine/src/work_queue.rs +++ b/engine/src/work_queue.rs @@ -1,6 +1,6 @@ use std::marker::PhantomData; -use std::sync::mpsc::{channel as mpsc_channel, Sender as MpscSender}; -use std::thread::JoinHandle as ThreadHandle; +use std::sync::mpsc::{Sender as MpscSender, channel as mpsc_channel}; +use std::thread::{Builder as ThreadBuilder, JoinHandle as ThreadJoinHandle}; pub struct Work<UserData: Send + Sync + 'static> { @@ -12,25 +12,28 @@ pub struct Work<UserData: Send + Sync + 'static> pub struct WorkQueue<UserData: Send + Sync + 'static> { work_sender: MpscSender<Work<UserData>>, - _thread: ThreadHandle<()>, + _thread: ThreadJoinHandle<()>, _pd: PhantomData<UserData>, } impl<UserData: Send + Sync + 'static> WorkQueue<UserData> { - pub fn new() -> Self + pub fn new(name: &str) -> Self { let (work_sender, work_receiver) = mpsc_channel::<Work<UserData>>(); Self { work_sender, - _thread: std::thread::spawn(move || { - let work_receiver = work_receiver; + _thread: ThreadBuilder::new() + .name(name.to_string()) + .spawn(move || { + let work_receiver = work_receiver; - while let Ok(work) = work_receiver.recv() { - (work.func)(work.user_data); - } - }), + while let Ok(work) = work_receiver.recv() { + (work.func)(work.user_data); + } + }) + .expect("Failed to create work queue thread"), _pd: PhantomData, } } |
