summaryrefslogtreecommitdiff
path: root/engine/src/work_queue.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/work_queue.rs')
-rw-r--r--engine/src/work_queue.rs23
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,
}
}