Alaska Software Inc. - Dos cosas
Username: Password:
AuthorTopic: Dos cosas
Osvaldo Ramirez Dos cosas
on Thu, 05 Oct 2006 20:19:08 -0600
Estimados Colegas

1.- Tengo esta condicion

    _rt_code := ( chkUserID( cCajero ) .OR. chkUserIDshort( cCajero ) )

Pregunta, si la primera funcion regresa verdadero, se ejecuta de todos 
modos la segunda funcion ?


2.- Hablando de Hilos.

Mi punto de venta, quiero lanzar un hilo independiente del hilo maestro.
En este hilo quiero hacer unos procesos, pero no quiero en caso de que 
truene o falle, me saque del sistema, por lo cual le voy a poner unos 
bloques de begin restore.

Mi pregunta, es si dichos bloques de BEGIN Y RECOVER, solo afectan a mi 
hilo actual o afectan a todos los hilos de mi app. ?

Saludos
Osvaldo Ramirez
Pablo BotellaRe: Dos cosas
on Fri, 06 Oct 2006 09:44:07 +0200
Hola Osvaldo,

>1.- Tengo esta condicion
>    _rt_code := ( chkUserID( cCajero ) .OR. chkUserIDshort( cCajero ) )
> Pregunta, si la primera funcion regresa verdadero, se ejecuta de todos 
> modos la segunda funcion ?

No, a menos que uses la opcin /z al compilar para desactivar la 
optimizacin de expresiones.

Si quieres que se ejecuten las dos evaluaciones siempre puedes hacer esto

#pragma Shortcut( OFF )
_rt_code := ( chkUserID( cCajero ) .OR. chkUserIDshort( cCajero ) )

#pragma Shortcut( ON )



> 2.- Hablando de Hilos.
> Mi pregunta, es si dichos bloques de BEGIN Y RECOVER, solo afectan a mi 
> hilo actual o afectan a todos los hilos de mi app. ?


En principio, cada thread mantiene su propia pila aislada, as que con un 
BEGIN....RECOVER...ENDSEQUENCE en principio bastara para mantener la 
integridad del hilo en caso de fallo. As es que la idea es que puedas 
truncar un hilo ( siempre que no sea el principal) sin afectar a los dems, 
ya que hasta las bases de datos mantienen workspaces diferentes para cada 
hilo.

Todo esto se ve muy bonito, sin embargo a veces te encuentras con que la 
aplicacin se viene abajo o se vuelve extremadamente lenta tras recuperarse 
de un error, y es que los hilos comparten heaps para gestion interna de 
memoria el colector de basura es el mismo asi que si se te atasca un thread 
se te viene abajo todo el proceso.

As que si realmente es crtico el que las tareas estn aisladas, quizas lo 
mejor sera lanzar otro proceso ( podra incluso ser el mismo exe con 
distintos parmetros) y si necesitas intercambiar informacin entre ellos o 
sincronizarlos puedes usar WM_COPYDATA para conectarlos.

Saludos,

Pablo Botella
Osvaldo Ramirez Re: Dos cosas
on Fri, 06 Oct 2006 08:34:17 -0600
Muchas Gracias Pablo Botella

Enconces es la razon, por lo cual una aplicacion que tengo trabajando, 
de repente se vuelve lentisima, ya que evito los errores.

Saludos
Osvaldo Ramirez




> Hola Osvaldo,
> 
>> 1.- Tengo esta condicion
>>    _rt_code := ( chkUserID( cCajero ) .OR. chkUserIDshort( cCajero ) )
>> Pregunta, si la primera funcion regresa verdadero, se ejecuta de todos 
>> modos la segunda funcion ?
> 
> No, a menos que uses la opción /z al compilar para desactivar la 
> optimización de expresiones.
> 
> Si quieres que se ejecuten las dos evaluaciones siempre puedes hacer esto
> 
> #pragma Shortcut( OFF )
> _rt_code := ( chkUserID( cCajero ) .OR. chkUserIDshort( cCajero ) )
> 
> #pragma Shortcut( ON )
> 
> 
> 
>> 2.- Hablando de Hilos.
>> Mi pregunta, es si dichos bloques de BEGIN Y RECOVER, solo afectan a mi 
>> hilo actual o afectan a todos los hilos de mi app. ?
> 
> 
> En principio, cada thread mantiene su propia pila aislada, así que con un 
> BEGIN....RECOVER...ENDSEQUENCE en principio bastaría para mantener la 
> integridad del hilo en caso de fallo. Así es que la idea es que puedas 
> truncar un hilo ( siempre que no sea el principal) sin afectar a los demás, 
> ya que hasta las bases de datos mantienen workspaces diferentes para cada 
> hilo.
> 
> Todo esto se ve muy bonito, sin embargo a veces te encuentras con que la 
> aplicación se viene abajo o se vuelve extremadamente lenta tras recuperarse 
> de un error, y es que los hilos comparten heaps para gestion interna de 
> memoria el colector de basura es el mismo asi que si se te atasca un thread 
> se te viene abajo todo el proceso.
> 
> Así que si realmente es crítico el que las tareas estén aisladas, quizas lo 
> mejor sería lanzar otro proceso ( podría incluso ser el mismo exe con 
> distintos parámetros) y si necesitas intercambiar información entre ellos o 
> sincronizarlos puedes usar WM_COPYDATA para conectarlos.
> 
> Saludos,
> 
> Pablo Botella
> 
> 
> 
> 
> 
>