When the on / off switch is pressed or a project is started without user interface (using the -exec parameter) execution is started at the start objects. If there exist multiple start objects, a thread is created for each start object.
The stop object is provided to do a clean shutdown of the program when running with the GUI. If a stop object is encountered and the program is switched off in the user interface, threads are not automatically terminated. But execution is started at all stop objects. These newly created threads should notify all running threads to terminate safely. Execution is actually stopped when all threads have terminated. This is for example important when thread locking is used. Otherwise threads would be terminated leaving other threads in a locked state.