make example external_source_external_thread deterministic (#16574)
# Objective - make example external_source_external_thread deterministic ## Solution - Don't depend on real time
This commit is contained in:
		
							parent
							
								
									2309c07e8e
								
							
						
					
					
						commit
						4282c3fe40
					
				| @ -5,14 +5,15 @@ use bevy::prelude::*; | |||||||
| use crossbeam_channel::{bounded, Receiver}; | use crossbeam_channel::{bounded, Receiver}; | ||||||
| use rand::{Rng, SeedableRng}; | use rand::{Rng, SeedableRng}; | ||||||
| use rand_chacha::ChaCha8Rng; | use rand_chacha::ChaCha8Rng; | ||||||
| use std::time::{Duration, Instant}; |  | ||||||
| 
 | 
 | ||||||
| fn main() { | fn main() { | ||||||
|     App::new() |     App::new() | ||||||
|         .add_event::<StreamEvent>() |         .add_event::<StreamEvent>() | ||||||
|         .add_plugins(DefaultPlugins) |         .add_plugins(DefaultPlugins) | ||||||
|         .add_systems(Startup, setup) |         .add_systems(Startup, setup) | ||||||
|         .add_systems(Update, (read_stream, spawn_text, move_text)) |         .add_systems(Update, (spawn_text, move_text)) | ||||||
|  |         .add_systems(FixedUpdate, read_stream) | ||||||
|  |         .insert_resource(Time::<Fixed>::from_seconds(0.5)) | ||||||
|         .run(); |         .run(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -25,7 +26,7 @@ struct StreamEvent(u32); | |||||||
| fn setup(mut commands: Commands) { | fn setup(mut commands: Commands) { | ||||||
|     commands.spawn(Camera2d); |     commands.spawn(Camera2d); | ||||||
| 
 | 
 | ||||||
|     let (tx, rx) = bounded::<u32>(10); |     let (tx, rx) = bounded::<u32>(1); | ||||||
|     std::thread::spawn(move || { |     std::thread::spawn(move || { | ||||||
|         // We're seeding the PRNG here to make this example deterministic for testing purposes.
 |         // We're seeding the PRNG here to make this example deterministic for testing purposes.
 | ||||||
|         // This isn't strictly required in practical use unless you need your app to be deterministic.
 |         // This isn't strictly required in practical use unless you need your app to be deterministic.
 | ||||||
| @ -33,12 +34,8 @@ fn setup(mut commands: Commands) { | |||||||
|         loop { |         loop { | ||||||
|             // Everything here happens in another thread
 |             // Everything here happens in another thread
 | ||||||
|             // This is where you could connect to an external data source
 |             // This is where you could connect to an external data source
 | ||||||
|             let start_time = Instant::now(); |  | ||||||
|             let duration = Duration::from_secs_f32(rng.gen_range(0.0..0.2)); |  | ||||||
|             while start_time.elapsed() < duration { |  | ||||||
|                 // Spinning for 'duration', simulating doing hard work!
 |  | ||||||
|             } |  | ||||||
| 
 | 
 | ||||||
|  |             // This will block until the previous value has been read in system `read_stream`
 | ||||||
|             tx.send(rng.gen_range(0..2000)).unwrap(); |             tx.send(rng.gen_range(0..2000)).unwrap(); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 François Mockers
						François Mockers