Problema 500 g_thread_create
Publicado por Esther (8 intervenciones) el 24/08/2007 08:43:22
Hola a todos, quiero crear 500 hilos y que cada hilo me cree un fichero y escriba en él la fecha y la hora actual.
Descripción del hardware:
- CPU: Intel (R) Pentium (R) 4 CPU 1.60 GHz
- RAM: 256 MB
Descripción Paquetes:
- SO: White Box Enterprise 4.0
- Glibc 2.3.4-3
- Glib2-2.4.7-1
- Glib2-devel-2.4.7-1
- Glibc-devel-2.3.4-2
- Gcc 3.4.3-9
El problema que tengo es que si utilizo los hilos de la glib (g_thread) me permite crear 302 hilos, y me da el siguiente mensaje de error:
GThread-ERROR**: file gthred-posix.c: line 351() error ‘No se pudo asignar memoria during ‘ pthread-create
En cambio si utilizo los hilos de C (pthread) si me crea el número de hilos que deseo (500) . ¿Alguien sabe por qué me pasa esto ?
Código que estoy usando:
#include<gtk/gtk.h>
#include<stdlib.h>
#include<glib.h>
#include<stdio.h>
#include<time.h>
#include<dlfcn.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<pthread.h>
GThreadFunc funcion1(gint i)
{
FILE *FCH;
gchar fecha[80]={0}, cadena[100]={0},nfuncion[5]={0};
struct tm *fecha_hora;
time_t cronometro;
while(1)
{
sprintf(nfuncion,”%d”,i);
strcpy(cadena,”fic”);
strcat(cadena,nfuncion);
FCH=fopen(cadena,”r+”);
If(FCH == NULL)
{
FCH=fopen(cadena,”a+”);
fclose(FCH);
FCH=fopen(cadena,”r+”);
}
time(&cronometro);
fecha_hora=localti me(&cronometro);
strftime(fecha,80,”[%d-%m-%Y][%X]\n”,fecha_hora);
fseek(FCH,0,SEEK_END);
fprintf(FCH,fecha);
fclose(FCH);
usleep(1000);
}
}
void iniciarFF500()
{
gint i=0;
GThread *hilo
while(i<500)
{
hilo=g_thread_create(funcion1, I ,TRUE,NULL);
i++;
}
}
gint main(int argc,char *argv[])
{
if(g_thread_supported())
g_thread_init(NULL);
gtk_init(&argc,&argv);
iniciarFF500();
g_threads_enter();
gtk_main();
gdk_threads_leave();
return 0;
}
Descripción del hardware:
- CPU: Intel (R) Pentium (R) 4 CPU 1.60 GHz
- RAM: 256 MB
Descripción Paquetes:
- SO: White Box Enterprise 4.0
- Glibc 2.3.4-3
- Glib2-2.4.7-1
- Glib2-devel-2.4.7-1
- Glibc-devel-2.3.4-2
- Gcc 3.4.3-9
El problema que tengo es que si utilizo los hilos de la glib (g_thread) me permite crear 302 hilos, y me da el siguiente mensaje de error:
GThread-ERROR**: file gthred-posix.c: line 351() error ‘No se pudo asignar memoria during ‘ pthread-create
En cambio si utilizo los hilos de C (pthread) si me crea el número de hilos que deseo (500) . ¿Alguien sabe por qué me pasa esto ?
Código que estoy usando:
#include<gtk/gtk.h>
#include<stdlib.h>
#include<glib.h>
#include<stdio.h>
#include<time.h>
#include<dlfcn.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<pthread.h>
GThreadFunc funcion1(gint i)
{
FILE *FCH;
gchar fecha[80]={0}, cadena[100]={0},nfuncion[5]={0};
struct tm *fecha_hora;
time_t cronometro;
while(1)
{
sprintf(nfuncion,”%d”,i);
strcpy(cadena,”fic”);
strcat(cadena,nfuncion);
FCH=fopen(cadena,”r+”);
If(FCH == NULL)
{
FCH=fopen(cadena,”a+”);
fclose(FCH);
FCH=fopen(cadena,”r+”);
}
time(&cronometro);
fecha_hora=localti me(&cronometro);
strftime(fecha,80,”[%d-%m-%Y][%X]\n”,fecha_hora);
fseek(FCH,0,SEEK_END);
fprintf(FCH,fecha);
fclose(FCH);
usleep(1000);
}
}
void iniciarFF500()
{
gint i=0;
GThread *hilo
while(i<500)
{
hilo=g_thread_create(funcion1, I ,TRUE,NULL);
i++;
}
}
gint main(int argc,char *argv[])
{
if(g_thread_supported())
g_thread_init(NULL);
gtk_init(&argc,&argv);
iniciarFF500();
g_threads_enter();
gtk_main();
gdk_threads_leave();
return 0;
}
Valora esta pregunta


0