Toolkit II, Manual de Usuario
Anterior Siguiente

9 Control de Tareas

Como el QDOS es un sistema operativo multitarea, es posible tener a la vez un número de tareas compitiendo o colaborando. Compitiendo por los recursos en función de su prioridad, y colaborando comunicándose mediante el uso de conductos ("Pipes") o de memoria compartida. Los atributos básicos de una tarea son su prioridad y su posición en el árbol de tareas (su propietaria). Para identificar una tarea se utilizan dos números: uno es el número de tarea (que es su índice en la tabla de tareas) y el otro un contador que sirve para diferenciar la tarea de otra eliminada que hubiera ocupado anteriormente la misma posición en la tabla de tareas. Los dos números combinados dan la identificación de la tarea (id) que es igual al número de tarea + contador*65536. Las siguientes rutinas de control de tareas utilizan dicho número de identificación, el cual puede ser dado como un sólo número (bien calculado de acuerdo a la fórmula anterior, bien tal como es devuelto por las funciones OJOB y NXJOB del Toolkit II) o como un par de números (número de Tarea, contador). Es decir, el parámetro único 65538 (2+1*65536) es equivalente a los dos parámetros 2,1.

9.1 Comandos para el Control de Tareas

JOBS es el comando que lista todas las tareas que se encuentran ejecutando en el QL en un momento determinado. Si el número de tareas que hay en la máquina es mayor que el que puede ser listado en la ventana, el procedimiento congela la salida (CTRL F5) cuando la ventana se llena. El procedimiento puede fallar si se elimina una tarea del QL mientras está listándolas. Para cada tarea se da la siguiente información:

El comando es:

JOBS lista las tareas actuales en #1
JOBS #canal lista las tareas actuales en #canal
JOBS nombre lista las tareas en "nombre"

Tres son los procedimientos que permiten el control de tareas en el QL:

RJOB id o nombre,código de error elimina una tarea
SPJOB id o nombre,prioridad selecciona la prioridad de una tarea
AJOB id o nombre,prioridad activa una tarea

Si en lugar de una identificación, se da el nombre de la tarea, el procedimiento buscará la primera tarea que pueda encontrar con el nombre dado.

Si existe alguna tarea esperando que termine otra eliminada con RJOB, será liberada con un valor de D0 igual al código de error dado.

Por ejemplo:

RJOB 3,8,1 elimina la tarea 3,8 con error -1
SPJOB demon,1 selecciona a 1 la prioridad de la tarea llamada "demon"

9.2. Funciones sobre el Estado de las Tareas

Las funciones sobre el estado de las tareas se incluyen para posibilitar la exploración desde el SuperBASIC del árbol de Tareas, de forma que se puedan realizar procedimientos complejos de control de tareas.

PJOB (id o nombre) devuelve la prioridad de la tarea
OJOB (id o nombre) devuelve la tarea propietaria de la tarea
JOB$ (id o nombre) devuelve el nombre de la tarea
NXJOB (id o nombre,id de la tarea superior) devuelve la siguiente tarea del árbol

NXJOB es una función más bien compleja. El primer parámetro es la identificación de la tarea que está siendo examinada actualmente. El segundo parámetro es la identificación de la tarea superior del árbol. Si el primer parámetro pasado corresponde a la última tarea que pertenece, directa o indirectamente, a la tarea superior, NXJOB devolverá el valor 0; de lo contrario, devolverá la identificación de la siguiente tarea del árbol.

La tarea 0 siempre existe y es propietaria, directa o indirectamente, de todas las tareas del QL. Por ello, una exploración que empiece con los parámetros (0,0), explorará todas las tareas del QL.

Es posible que termine una tarea durante la exploración del árbol. Como precaución contra este hecho, las funciones de estado de las tareas devuelven los siguientes valores cuando son llamadas con valores inválidos de identificación de tareas:

PJOB = 0 OJOB = 0 JOB$ = "" NXJOB = -1


Anterior Índice de Materias Siguiente
Ejecución de programas   Abrir y Cerrar