El Manejo de los Procesos: Cómo detener los Procesos

Los procesos que han sido lanzados desde botones o desde tortugas pueden ser detenidos con cualquiera de las siguientes acciones:

Existen cuatro primitivas que permiten detener procesos a través de un programa:

apaga
detén
deténme
fija

En el programa para dibujar las flores de Las tortugas y Enciende, los procesos de las tortugas pueden ser detenidos escribiendo:

todas [apaga]

Apaga equivale exactamente a hacer clic en la tortuga para detenerla. Por eso, apaga solo detiene los procesos lanzados por las tortugas.

Detén es más sutil. Antes que nada miremos los procesos que han sido lanzados a través de instrucciones con los mandos lanza, porsiempre y cuando. La entrada de detén debe ser exactamente igual a la entrada del mando que disparó el proceso (en el caso de cuando, debe ser igual a su primera entrada). Para entender como trabaja detén, consideremos el caso más simple:

  • Deje la tortuga activa por un tiempo.Luego escriba:
    detén [adelante 1]
  • La tortuga se detiene.

    Para controlar qué procesos hay que detener, se debe mirar dentro del área de Procesos mientras éstos se están ejecutando.

    Como hemos visto antes, un proceso lanzado por cuando es menos evidente, ya que continúa activo hasta que se lo cancele en forma explícita. Por ejemplo, escriba:

    porsiempre [ad 1]
    cuando [coory > 100][atrás 100]

    Para cancelar el proceso lanzado por cuando, escriba:

    detén [coory > 100]

    También se puede usar el mando detén para detener un proceso que ha sido lanzado desde un botón o desde una tortuga utilizando los modos Una vez o Muchas veces. Por ejemplo:

    En los ejemplos anteriores con detén tuvo que haber notado que la entrada de detén es la instrucción del proceso, no su nombre. El nombre del proceso es un número arbitrario, mientras que la instrucción del proceso es una expresión distintiva.

    Vamos a probar un ejemplo un poco más complejo que envuelve a una familia de procesos. Hemos definido el procedimiento vuela en Los botones y las familias de procesos. Este procedimiento se lanzaba desde un botón y, a su vez, lanzaba dos subprocesos diferentes:

    para vuela
    porsiempre [ffigura "pájaro1 ffigura "pájaro2]
    porsiempre [adelante 1]
    fin

    Haga clic en vuela para iniciar los procesos. Se puede detener cada proceso individual con detén:

    detén [ffigura "pájaro1 ffigura "pájaro2]
    detén [adelante 1]

    También se puede detener cada proceso individualmente en el árbol del proceso, haciendo clic con el botón derecho del ratón en el proceso, y seleccionando Detener.

    Podemos observar que cuando cada proceso hijo es cancelado, el botón también se desactiva. Ya no hay razón para que continúe activo.

    Deténme sólo detiene el proceso en el cual fue activado. Por ejemplo:

    porsiempre [ad 1 si (distancia "t2) > 100 [deténme]]

    Otra forma de detener un botón o una tortuga es mediante el mando fija.

    fija "botón1 "activa? "cierto

    equivale a hacer clic en el botón para lanzar su proceso(s).

    fija "botón1 "activa? "falso

    equivale a hacer clic en el botón para detenerlo.

    También se puede establecer la instrucción del botón con el mando fija. Por ejemplo:

    fija "botón1 "regla [lanza [vuela]]

    Ver fija.