|   | 1 | = Manual =  | 
                  
                          |   | 2 |   | 
                  
                          |   | 3 | == How to use Kernel/Task subsystem ==  | 
                  
                          |   | 4 |   | 
                  
                          |   | 5 | Most of the games has got a main-loop. During the execution of one cycle of the loop a game engine has to perfrom a lot of tasks, e.g. checking user input, rendering, physic update and so on. [[BR]]   | 
                  
                          |   | 6 | nrEngine's Kernel/Task subsystems provides a simple but powerfull interface to manage the main loop. The engine does contains a '''Kernel''' which runs in the background of the engine. A '''Task''' can be bound to the kernel, so that it gets updated every cycle. A task can be any user derived class which has to perform repetitive jobs, e.g. check for user input or stream data from the disk. [[BR]]  | 
                  
                          |   | 7 | Moreover a task can get a specific order number or it can depend on another task. Hence the engine does provide a simple graph based task execution system. The functionality of the nrEngine's kernel is similar to the operating system's one, but in a very simple form. [[BR]]  | 
                  
                          |   | 8 | And finally a task can be shifted to a thread, so that it executes in parallel to the main application.  | 
                  
                          |   | 9 |   | 
                  
                          |   | 10 | The following code show you how to use the engine's kernel subsystem for a simple managment of tasks in your application/game:  | 
                  
                          |   | 11 | {{{  | 
                  
                          |   | 12 | #include <nrEngine/nrEngine.h>  | 
                  
                          |   | 13 |   | 
                  
                          |   | 14 | using namespace nrEngine;  | 
                  
                          |   | 15 |   | 
                  
                          |   | 16 | //! This is a simpel task performing sound output  | 
                  
                          |   | 17 | class SoundTask :  public ITask  | 
                  
                          |   | 18 | {         | 
                  
                          |   | 19 | public:   | 
                  
                          |   | 20 |     | 
                  
                          |   | 21 |         SoundTask();  | 
                  
                          |   | 22 |         ~SoundTask();  | 
                  
                          |   | 23 |   | 
                  
                          |   | 24 |         //! This method will be called when the task stops                                | 
                  
                          |   | 25 |         Result stopTask();        | 
                  
                          |   | 26 |           | 
                  
                          |   | 27 |         //! Task was added to the kernel, so initilize it  | 
                  
                          |   | 28 |         Result onAddTask();  | 
                  
                          |   | 29 |           | 
                  
                          |   | 30 |         //! This is called every cycle, so that SoundTask can react on it  | 
                  
                          |   | 31 |         Result updateTask();  | 
                  
                          |   | 32 |   | 
                  
                          |   | 33 |         ...  | 
                  
                          |   | 34 | };  | 
                  
                          |   | 35 |   | 
                  
                          |   | 36 | void main()  | 
                  
                          |   | 37 | {  | 
                  
                          |   | 38 |         // Initialize engine  | 
                  
                          |   | 39 |         ...  | 
                  
                          |   | 40 |   | 
                  
                          |   | 41 |   | 
                  
                          |   | 42 |         // Add the sound task to the kernel with a low order number  | 
                  
                          |   | 43 |         Engine::sKernel()->AddTask(new SoundTask(), ORDER_LOW);  | 
                  
                          |   | 44 |   | 
                  
                          |   | 45 |         // Executes engine's kernel, hence execute all tasks which are in the kernel  | 
                  
                          |   | 46 |         // The function returns if there are no more tasks in the kernel (i.e. if all tasks stops)  | 
                  
                          |   | 47 |         Engine::sKernel()->Execute();  | 
                  
                          |   | 48 | }  | 
                  
                          |   | 49 | }}}    | 
                  
                          |   | 50 |   | 
                  
                          |   | 51 | See also: ["ManualPage"]  |