= Manual = == How to use Kernel/Task subsystem == 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]] 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]] 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]] And finally a task can be shifted to a thread, so that it executes in parallel to the main application. The following code show you how to use the engine's kernel subsystem for a simple managment of tasks in your application/game: {{{ #!cpp #include using namespace nrEngine; //! This is a simpel task performing sound output class SoundTask : public ITask { public: SoundTask(); ~SoundTask(); //! This method will be called when the task stops Result stopTask(); //! Task was added to the kernel, so initilize it Result onAddTask(); //! This is called every cycle, so that SoundTask can react on it Result updateTask(); ... }; void main() { // Initialize engine ... // Add the sound task to the kernel with a low order number Engine::sKernel()->AddTask(new SoundTask(), ORDER_LOW); // Executes engine's kernel, hence execute all tasks which are in the kernel // The function returns if there are no more tasks in the kernel (i.e. if all tasks stops) Engine::sKernel()->Execute(); } }}} See also: ["ManualPage"]