Author | Topic: 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 Botella | Re: 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 > > > > > > |