Program termination

From Rosetta Code
Revision as of 00:03, 22 April 2008 by rosettacode>Waldorf (Ada)
Task
Program termination
You are encouraged to solve this task according to the task description, using any language you may know.

Show the syntax for a complete stoppage of a program inside a conditional. This includes all threads/processes running under your program.

Ada

Ada programs execute in one or more tasks. All tasks created during the execution of a program depend in a hierarchical manner on the task that create them, except for the environment task which executes the "main" procedure for the program. Each task will abort (terminate abnormally) if the task upon which it depends is aborted. This approach to task termination is not recommended because it does not allow tasks to terminate in a known state.

However, this Rosetta Code task requires a simple stoppage of the program including all tasks. The simple way to achieve this is to abort the environment task.

<ada> with Ada.Task_Identification; use Ada.Task_Identification;

procedure Main is

  -- Create as many task objects as your program needs

begin

  -- whatever logic is required in your Main procedure
  if some_condition then
     Abort_Task(Current_Task);
  end if;

end Main; </ada>

A more correct approach to such termination is to provide an entry in each task created by the environment task which, when called by the task upon which it depends, causes the called task to terminate in a known state.

<ada> procedure Main is

  -- Create as many task objects as your program needs

begin

  -- whatever logic is required in your Main procedure
  if some_condition then
     -- for each task created by the Main procedure
     The_task.Stop;
     -- end the Main procedure
     return;
  end if;

end Main; </ada>

BASIC

Works with: QuickBasic version 4.5

<qbasic>if problem = 1 then

  end

end if</qbasic>

C

<c>#include <stdlib.h>

if(problem){

 exit(integerErrorCode); /*conventionally, error code 0 is the code for "OK", while anything else is an actual problem*/
 /*optionally: return the integerErrorCode from the main() function*/

}</c>

Java

<java>if(problem){

  System.exit(integerErrorCode); //conventionally, error code 0 is the code for "OK", while anything else is an actual problem
  //optionally: Runtime.getRuntime().exit(integerErrorCode);

}</java>

OCaml

<ocaml>if problem then

   exit integerErrorCode (*conventionally, error code 0 is the code for "OK",while anything else is an actual problem*)</ocaml>

Perl

<perl>if ($problem) {

   exit integerErrorCode; #conventionally, error code 0 is the code for "OK" (you can also omit the argument in this case)
                          #while anything else is an actual problem

}</perl>

Python

<python>if problem:

   sys.exit(integerErrorCode) #conventionally, error code 0 is the code for "OK" (you can also omit the argument in this case)
                              #while anything else is an actual problem</python>