Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Cursos gratis / Manual de Programación en OS/2 - APENDICE A. Llamadas dosxxx para multitarea

Manual de Programación en OS/2 - APENDICE A. Llamadas dosxxx para multitarea

 ----- 
Creative Commons Curso gratis de Supertutoriales - 24 de Agosto de 2005
Temas Relacionados: OS/2
17. APENDICE A. Llamadas dosxxx para multitarea
DosCreateThread



DosCreateThread crea un nuevo Thread asíncrono. El código especificado empieza su ejecución de forma paralela al código que ejecutó la instrucción. En el caso del EMX, debe usarse la función _beginthread(), a menos que el código no haga llamadas a funciones estandar de C. Ver la documentación del compilador.

#define INCL_BASE
#include <os2.h>

PTID ptidThreadID;
PFNTHREAD pThreadAddr;
ULONG ulThreadArg;
ULONG ulThreadFlags;
ULONG ulStackSize;
APIRET rc; /* Codigo de error */

rc = DosCreateThread(ptidThreadID, pThreadAddr, ulThreadArg, ulThreadFlags, ulStackSize);

||

Parámetros

|| || ptidThreadID || Un puntero donde OS/2 devuelve el identificador del thread creado. ||
|| pThreadAddr || Un puntero a la rutina a ser ejecutada por el nuevo thread. Esta función admite un parámetro ThreadArg y retorna una doble palabra al terminar. El retorno desde la función con DosExit hace que el thread finalice. ||
|| ulThreadArg || Un argumento que es pasado a la rutina del thread como un parámetro. Normalmente es un puntero a un bloque de parámetros. ||
|| ulThreadFlags || Si el bit 0 está puesto a cero, el nuevo thread comienza inmediatamente. Si está puesto a uno, queda dormido, y el creador del thread tiene que usar DosResumeThread para que empiece la ejecución. El resto de bits debe estar a cero. ||
|| ulStackSize || La longitud, en bytes, de la pila del nuevo thread. El tamaño es redondeado a un número completo de páginas, o bien a 2 páginas si el tamaño es menor. ||

||

Codigos de error

|| || || Sin error ||
|| 8 || No hay suficiente memoria ||
|| 95 || Interrupción ||
|| 115 || Violación de protección ||
|| 164 || No se pueden crear más threads ||






DosEnterCritSec




DosEnterCritSec duerme todos los threads pertenecientes al proceso actual excepto el que realiza la llamada. Puede ser útil para casos en los que se quiera sincronizar accesos muy esporádicos, sin tener que usar semáforos.

#define INCL_BASE
#include <os2.h>

APIRET rc; /* Codigo de error */

rc = DosEnterCritSec();

||

Codigos de error

|| || || Sin error ||
|| 309 || Identificador de Thread no válido ||
|| 484 || Desbordamiento de CritSec ||






DosExecPgm




DosExecPgm permite a un programa ejecutar a otro como un proceso hijo.

#define INCL_BASE
#include <os2.h>

PCHAR pObjNameBuf;
LONG lObjNameBufL;
ULONG ulExecFlags;
PSZ pszArgPointer;
PSZ pszEnvPointer;
PRESULTCODES pReturnCodes;
PSZ pszPgmPointer;
APIRET rc; /* Codigo de error */

rc = DosExecPgm(pObjNameBuf, lObjNameBufL, ulExecFlags, pszArgPointer, pszEnvPointer, pReturnCodes, pszPgmPointer);

||

Parámetros

|| || pObjNameBuf || Puntero a un buffer donde OS/2 devuelve el nombre del objeto que ha contribuido al fallo de DosExecPgm. ||
|| lObjNameBufL || Longitud en bytes del buffer ObjNameBuf ||
|| ulExecFlags || Indica como se debe ejecutar el programa, según los valores siguientes: ||
|| || || || (EXEC_SYNC): La ejecuci&oacutE;n es síncrona con el proceso padre (éste queda dormido hasta que el proceso hijo ha terminado de ejecutarse). El código de terminación es almacenado en las dos dobles palabras apuntadas por ReturnCodes. || || 1 || (EXEC_ASYNC): La ejecución es asíncrona. Cuando el proceso hijo termina, el código de terminación es descartado. El PID es almacenado en la primera doble palabra apuntada por ReturnCodes. || || 2 || (EXEC_ASYNCRESULT): La ejecución es asíncrona. Cuando el proceso hijo termina, su codigo de terminación es almacenado para ser examinado posteriormente con DosWaitChild. El PID es almacenado el la primera doble palabra apuntada por ReturnCodes. || || 3 || (EXEC_TRACE): La ejecución es igual que en el caso 2, pero con las condiciones de debugging para el proceso hijo. || || 4 || (EXEC_BACKGROUND): La ejecución es asincrona, y se efectua como una sesión sin pantalla ni teclado (detached). Cuando el proceso hijo empieza, no se ve afectado por el fin del proceso padre, sino que es tratado como un proceso huerfano. Un programa ejecutado de esta forma funciona siempre en background, y no puede pedir ninguna entrada de teclado o salida por pantalla, aparte de VioPopups. No puede ejecutar ninguna entrada o salida de consola (VIO, KBD o MOU). || || 5 || (EXEC_LOAD): El programa es cargado y preparado, pero no se ejecuta hasta que el gestor se sesiones despacha el último thread del proceso. || || 6 || (EXEC_ASYNCRESULTDB): La ejecución es igual que en el caso 2, con el añadido de las condiciones de debugging para el proceso hijo y todos sus descendientes. De esta forma, es posible trazar procesos síncronos y detached. || ||
|| pszArgPointer || Puntero de las cadenas pasadas al programa. Representan los parametros del programa, que son copiados al segmento de entorno del nuevo proceso. La convención usada por CMD.EXE es que el primer string es el nombre del programa, y el segundo son los parametros. Un valor de cero indica que no hay parámetros para el programa. ||
|| pszEnvPointer || Puntero a las variables de entorno pasadas al programa. Estos strings representan variables de entorno y sus valores actuales. ||
|| pReturnCodes || Puntero a una estructura de dos dobles palabras donde el PID o el código de terminación es almacenado. Tiene dos zonas, a saber: ||
|| || || termcodepid || Para una petición asíncrona, contiene el PID del proceso hijo. Para una petición síncrona, el codigo de terminación describe por qué terminó el hijo. Los valores son: || || || || Valor || Definicion || || || Salida normal || || 1 || Error grave || || 2 || El proceso genero un trap || || 3 || Se mato el proceso con DosKillProcess || || 4 || El proceso genero una excepcion || || || || resultcode || Codigo de terminacion especificado en DosExit || ||
|| pszPgmPointer || Puntero al nombre del fichero que contiene el programa a ser ejecutado. ||

||

Codigos de error

|| || || Sin error ||
|| 1 || Función no válida ||
|| 2 || Fichero no encontrado ||
|| 3 || Path no encontrado ||
|| 4 || Demasiados archivos abiertos ||
|| 5 || Acceso denegado ||
|| 8 || No hay suficiente memoria ||
|| 10 || Entorno no válido ||
|| 11 || Formato no válido ||
|| 13 || Datos no válidos ||
|| 26 || Disco sin sistema de ficheros ||
|| 32 || Violación de compartición ||
|| 33 || Violación del bloqueo ||
|| 36 || Desbordamiento del buffer de compartición ||
|| 89 || Sin slots de procs ||
|| 95 || Interrupción ||
|| 108 || Unidad bloqueada ||
|| 127 || Proc no encontrado ||
|| 182 || Ordinal no válido ||
|| 190 || Tipo de módulo no válido ||
|| 191 || Signatura de EXE no válida ||
|| 192 || Marca de EXE no válida ||
|| 195 || MINALLOCSIZE no válido ||
|| 196 || Enlace dinámico pedido desde un anillo no válido ||






DosExit




DosExit suele ser llamada cuando un thread termina.

#define INCL_BASE
#include <os2.h>

ULONG ulActionCode;
ULONG ulResultCode;

DosExit(ulActionCode, ulResultCode);

||

Parámetros

|| || ulActionCode || Determina si se termina solo el thread actual, o todos los threads del proceso. Los valores posibles son: 0: (EXIT_THREAD) el thread actual termina. 1: (EXIT_PROCESS) todos los threads del proceso terminan. ||
|| ulResutlCode || Un valor que es pasado a cualquier thread que halla ejecutado un DosWaitChild para este proceso. ||






DosExitCritSec




DosExitCritSec restaura el funcionamiento normal de todos los threads de un proceso, después de la ejecución de un DosEnterCritSec.

#define INCL_BASE
#include <os2.h>

APIRET rc; /* Codigo de error */

rc = DosExitCritSec();

||

Codigos de error

|| || || Sin error ||
|| 309 || Identificador de Thread no válido ||
|| 485 || Underflow de CritSec (se ha intentado ejecutar más Exits que Enters). ||






DosKillProcess




DosKillProcess marca un proceso para ser finalizado, y devuelva el código de terminación a su padre (si lo tiene).

#define INCL_BASE
#include <os2.h>

ULONG ulActionCode;
PID idProcessID;
APIRET rc; /* Codigo de error */

rc = DosKillProcess(ulActionCode, idProcessID);

||

Parámetros

|| || ulActionCode || Los procesos que deben ser marcados para ser finalizados. El valor puede ser uno de los siguientes: ||
|| || || Valor || Definición || || || (DKP_PROCESSTREE) El proceso y todos sus procesos descendientes. El proceso tiene que ser el actual, o bien haber sido creado directamente por el proceso actual usando DosExecPgm con un valor de 2 (EXEC_ASYNCRESULT) en ExecFlags. || || 1 || (DKP_PROCESS) un solo proceso. Solo el proceso indicado es marcado para ser finalizado. || ||
|| idProcessID || El PID del proceso a ser marcado. ||

||

Codigos de error

|| || || Sin error ||
|| 13 || Datos no válidos ||
|| 217 || Procesos Zombie ||
|| 303 || PID no válido ||
|| 305 || No hay descendientes ||






DosKillThread




DosKillThread mata un thread del proceso actual. Si se mata al thread 1, todo el proceso muere. Si el thread a matar tiene código de 16 bits o ha sido creado por una llamada de 16 bits, se devuelve el error Ocupado.

#define INCL_BASE
#include <os2.h>

TID idThreadID;
APIRET rc; /* Codigo de error */

rc = DosKillThread(idThreadID);

||

Parámetros

|| || idThreadID || Identificador del thread a matar. ||

||

Codigos de error

|| || || Sin error ||
|| 170 || Ocupado ||
|| 309 || Identificador de Thread no válido ||






DosResumeThread




DosResumeThread arranca un thread que fue parado previamente con DosSuspendThread.

#define INCL_BASE
#include <os2.h>

TID idThreadID;
APIRET rc; /* Codigo de error */

rc = DosResumeThread(idThreadID);

||

Parámetros

|| || PID del thread || ||

||

Codigos de error

|| || || Sin error ||
|| 90 || El thread no estaba parado ||
|| 309 || Identificador de Thread no válido ||






DosSetPriority




DosSetPriority cambia la prioridad del thread o de un proceso hijo.

#define INCL_BASE
#include <os2.h>

ULONG ulScope;
ULONG ulPriorityClass;
LONG lPriorityDelta;
ULONG ulID;
APIRET rc; /* Codigo de error */

rc = DosSetPriority(ulScope, ulPriorityClass, lPriorityDelta, ulID);

||

Parámetros

|| || ulScope || A quien afecta el cambio de prioridad. ||
|| || || Valor || Definición || || || (PRTYS_PROCESS) Todos los threads de un proceso. || || 1 || (PRTYS_PROCESSTREE) Todos los threads de un proceso y todos sus descendientes. El proceso indicado tiene que ser el actual o uno creado por el actual mediante DosExecPgm. || || 2 || (PRTYS_THREAD) un thread del proceso actual || ||
|| ulPriorityClass || Tipo de prioridad. El valor puede ser: ||
|| || || Valor || Definición || || || (PRTYC_NOCHANGE) No se cambia. || || 1 || (PRTYC_IDLETIME) Desocupado (Idle-time) || || 2 || (PRTYC_REGULAR) Medio o regular || || 3 || (PRTYC_TIMECRITICAL) Crítico || || 4 || (PRTYC_FOREGROUNDSERVER) Primer plano || ||
|| lPriorityDelta || Cambia el subnivel dentro del nivel actual de prioridad del proceso. Este valor debe ser un valor desde -31 (PRTYD_MINIMUM) hasta +31 (PRTYD_MAXIMUM). ||
|| ulID || Un identificador de proceso (Scope = 0 o 1) o un identificador de thread (Scope = 2). Si este operando es igual a cero, se asume el proceso o thread actual. ||

||

Codigos de error

|| || || Sin error ||
|| 303 || PID no válido ||
|| 304 || PDELTA no válido ||
|| 305 || No hay descendientes ||
|| 307 || PCLASS no válido ||
|| 308 || SCOPE no válido ||
|| 309 || Identificador de Thread no válido ||






DosSuspendThread




DosSuspendThread suspende temporalmente la ejecución de otro thread del proceso actual, hasta que se ejecuta un DosResumeThread.

#define INCL_BASE
#include <os2.h>

TID idThreadID;
APIRET rc; /* Codigo de error */

rc = DosSuspendThread(idThreadID);

||

Parámetros

|| || idThreadID || PID del thread que debe ser suspendido. ||

||

Codigos de error

|| || || Sin error ||
|| 309 || Identificador de Thread no válido ||






DosWaitThread




DosWaitThread suspende el thread actual hasta que otro thread termine. Devuelve el PID del thread que ha terminado.

#define INCL_BASE
#include <os2.h>

PTID ptidThreadID;
ULONG ulWaitOption;
APIRET rc; /* Codigo de error */

rc = DosWaitThread(ptidThreadID, ulWaitOption);

||

Parámetros

|| || ptidThreadID || Antes de llamar la función, debe contener un puntero al ThreadID del thread que interese. Si es cero, el thread actual espera hasta que un thread cualquiera del proceso actual termine. Si no es cero, espera hasta que ese thread concreto acabe.
Al volver, apunta al ThreadID (TID) del thread que ha terminado (util cuando se ha especificado cero en la entrada). ||
|| ulWaitOption || Indica cuando debe retornar: ||
|| || || Valor || Definición || || || (DCWW_WAIT) El thread actual espera hasta que un thread acabe. Si un thread ya había acabado, retorna inmediatamente con el ThreadID. || || 1 || (DCWW_NOWAIT) El thread actual no espera si no ha terminado ningún thread. Mediante el mensaje de error se puede saber si ya ha terminado o no. || ||

||

Codigos de error

|| || || Sin error ||
|| 95 || Interrupción ||
|| 294 || Thread no terminado ||
|| 309 || Identificador de Thread no válido ||
Autor y licencia de 'Manual de Programación en OS/2 - APENDICE A. Llamadas dosxxx para multitarea'
Supertutoriales Extraído de: http://www.publispain.com/supertutoriales

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Manual de Programación en OS/2 - APENDICE A. Llamadas dosxxx para multitarea'

Cómo optimizar sus recursos y lograr el éxito en su emprendimiento.Un plan de negocios es... Más »
Debian es el nombre de una organización dedicada al desarrollo y mantenimiento de sistemas operativos... Más »
El principal objetivo de este documento es lograr que el lector adquiera la capacidad de... Más »
Los sistemas cluster hace años que fueron diseñados, la computación paralela y distribuida no es... Más »
Las notas que siguen han sido elaboradas en el marco de un trabajo de Consultoría... Más »
¿Estás seguro de que deseas eliminar este capítulo?