00001 //=========================================================================== 00002 //= sub_proc.cc Enero de 1999 = 00003 //=-------------------------------------------------------------------------= 00004 //= Definiciones de la clase SUB_PROCESO. = 00005 //=-------------------------------------------------------------------------= 00006 //= ADVERTENCIA: ESTE SOFTWARE NO ESTA CONCEBIDO NI DISENNADO PARA EL USO = 00007 //= EN EQUIPO DE CONTROL EN LINEA EN ENTORNOS PELIGROSOS QUE REQUIERAN UN = 00008 //= DESEMPENNO LIBRE DE FALLAS, COMO LA OPERACION DE PLANTAS NUCLEARES, = 00009 //= SISTEMAS DE NAVEGACION O COMUNICACION EN AVIONES, TRAFICO AEREO, = 00010 //= EQUIPO MEDICO DEL CUAL DEPENDAN VIDAS HUMANAS O SISTEMAS DE ARMAMENTO, = 00011 //= EN LOS CUALES UNA FALLA EN EL SOFTWARE PUEDA IMPLICAR DIRECTAMENTE LA = 00012 //= MUERTE, DANNOS PERSONALES O DANNOS FISICOS Y/O AMBIENTALES GRAVES = 00013 //= ("ACTIVIDADES DE ALGO RIESGO"). = 00014 //=-------------------------------------------------------------------------= 00015 //= Autor original: Oscar J. Chavarro G. A.K.A. JEDILINK. Copyright (c), = 00016 //= 1997 - 2003, oscarchavarro@hotmail.com = 00017 //= AQUYNZA es software libre, y se rige bajo los terminos de la licencia = 00018 //= LGPL de GNU (http://www.gnu.org). Para mayor informacion respecto a la = 00019 //= licencia de uso, consulte el archivo ./doc/LICENCIA en la distribucion. = 00020 //=========================================================================== 00021 00022 #include "toolkits/net/sub_proc.h" 00023 #include <stdio.h> 00024 00025 //=========================================================================== 00026 //= Funciones de soporte = 00027 //=========================================================================== 00028 00029 #if PLATAFORMA == i386_LINUX_GCC || PLATAFORMA == SPARC64_LINUX_GCC 00030 static void (*global_prog)(void *); 00031 00032 void * 00033 linux_prog(void *arg) 00034 { 00035 global_prog(arg); // Y el candado que? <-- Posible lio de exclusion mutua! 00036 return NULL; 00037 } 00038 00039 #endif // PLATAFORMA == i386_LINUX_GCC || PLATAFORMA == SPARC64_LINUX_GCC 00040 00041 //=========================================================================== 00042 //= CLASE SUB_PROCESO = 00043 //=========================================================================== 00044 00045 SUB_PROCESO::SUB_PROCESO(void (*f)(void *)) 00046 { 00047 prog = f; 00048 } 00049 00050 BOOLEAN 00051 SUB_PROCESO::lanzar(void) 00058 { 00059 #if PLATAFORMA == i386_LINUX_GCC || PLATAFORMA == SPARC64_LINUX_GCC 00060 // CERRAR CANDADO? 00061 global_prog = prog; 00062 if ( pthread_create(&pid_hijo, NULL, linux_prog, NULL) ) { 00063 fprintf(stderr, 00064 "<SUB_PROCESO> ERROR: No pudo crearse un subproceso!\n"); 00065 fflush(stderr); 00066 return FALSE; 00067 } 00068 return TRUE; 00069 /* 00070 #elif PLATAFORMA == SGI 00071 pid_hijo = sproc(prog, PR_SALL); 00072 if ( pid_hijo == -1 ) { 00073 fprintf(stderr, 00074 "<SUB_PROCESO> ERROR: No pudo crearse un subproceso!\n"); 00075 fflush(stderr); 00076 return FALSE; 00077 } 00078 return TRUE; 00079 */ 00080 #elif PLATAFORMA == i386_WIN32_VC 00081 // OJO: Ya no funciona en MSVC7 ! 00082 /* 00083 pid_hijo = _beginthread(prog, 0, NULL); 00084 */ 00085 pid_hijo = -1; 00086 if ( pid_hijo == -1 ) { 00087 fprintf(stderr, 00088 "<SUB_PROCESO> ERROR: No pudo crearse un subproceso!\n"); 00089 fflush(stderr); 00090 return FALSE; 00091 } 00092 return TRUE; 00093 #else 00094 fprintf(stderr, 00095 "<SUB_PROCESO> ERROR - Threads no implementados en esta plataforma!\n"); 00096 fflush(stderr); 00097 return FALSE; 00098 #endif 00099 } 00100 00101 //=========================================================================== 00102 //= EOF = 00103 //=========================================================================== 00104