Foros del Web » Programación para mayores de 30 ;) » Java »

esperara que termine una funcion

Estas en el tema de esperara que termine una funcion en el foro de Java en Foros del Web. Buenas, Tengo una funcion (funcion1) que llama a otra funcion(funcion2). quiero que cuando termine de hacer unos calculos, la funcion uno llame a la 2. ...
  #1 (permalink)  
Antiguo 01/02/2012, 18:46
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
esperara que termine una funcion

Buenas,

Tengo una funcion (funcion1) que llama a otra funcion(funcion2). quiero que cuando termine de hacer unos calculos, la funcion uno llame a la 2.


codigo

public void funcion1(){

//hacer calculos



//ejecutamos la funcion 2
funcion2();

}

el problema esta que la funcion2 se ejecuta mientras los calculos se estan haceindo. como puedo hacer para que se llame cuando terminen esos calcullos????

Saludos
  #2 (permalink)  
Antiguo 01/02/2012, 22:31
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: esperara que termine una funcion

Hola:

Tal cual muestras el código, no puede estar pasando lo que estás diciendo. Primero se harán los cálculos y cuando se terminen se llamará a la funcion2(). Lo único es que en ese

//hacer calculos

los estés lanzando en un hilo o haciendo algo que java lance en un hilo por debajo. Si es así, no lances el hilo o entre //hacer calculos y funcion2() por un hilo.join();

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 02/02/2012, 02:23
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: esperara que termine una funcion

chuidiang,

me explique mal


Tengo una funcion recursiva que se va llamando asi misma. hay alguna forma de detectar cuando termina esa funcion??. mi idea es que cuando termine de hacer unos calculos esa funcion que llame a otra..

Ejemplo

funcion1 (parametro){

\\hacer calculos


\\se llama de nuevo asi misma
funcion1(parametro);

\\cuando termine de hacer todo, llamamos a otroa fuincion

funcion2(parametro);




}


saludos
  #4 (permalink)  
Antiguo 02/02/2012, 02:39
 
Fecha de Ingreso: febrero-2012
Mensajes: 75
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: esperara que termine una funcion

Si que hay manera, la más fácil es poner una condición.

Según veo le pasas un parámetro a f1, así tienes alguna manera de establecer cuando el parámetro o el resultado de f1(parámetro) es "bueno", por ejemplo menor que un valor delta.
Así pones un condicional:

Si parametro no bueno ---> f1
Si parametro bueno ---> abandonas f1 y ejecutas f2

Un saludo
__________________
Si quieres conseguir resultados diferentes no hagas siempre lo mismo.

Mejora tu entorno. MestralCadiz con su comunidad.
  #5 (permalink)  
Antiguo 02/02/2012, 03:47
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: esperara que termine una funcion

caperutxa,

yo no se el valor de ese parametro, puede cambiar segun lo que se ponga.

Saludos
  #6 (permalink)  
Antiguo 02/02/2012, 05:55
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: esperara que termine una funcion

Tienes que sacarla fuera de la ejecución de la funcion1, si no no habría manera.

funcion3 {
funcion1();
funcion2();
}
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #7 (permalink)  
Antiguo 02/02/2012, 07:26
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: esperara que termine una funcion

paso el ejemplo porque no logro entender bien como se hace.


int tamaño_fichero=0;
public void SizeFiles(File archivos_selec_paste){
// Sacamos todos los ficheros del directorio
if (archivos_selec_paste.isDirectory()){
String[] ficheros = archivos_selec_paste.list();
if(ficheros !=null){
for (int x=0;x<ficheros.length;x++) {


File asd = new File(ficheros[x]);
tamaño_ficheros_temp += asd.length();
System.out.println(tamaño_ficheros_temp);
// Por cada fichero volvemos a llamar recursivamente a la copa de directorios

SizeFiles(new File(archivos_selec_paste,ficheros[x]));

}


}
}else{

tamaño_ficheros_temp += archivos_selec_paste.length();
System.out.println(tamaño_ficheros_temp);
}
funcion2( tamaño_ficheros_temp);
}

lo que hace esto es calcular el tamaño total de las carpetas puesta en la variable(c:\windows) y cada recorrido de cada archivo lo va sumando en la variable tamaño_ficheros_temp.
lo que yo quiero hacer es que cuando termine de calcular el tamañao total de todos los ficheros de esa ruta que me ejecute funcion2 pasando como argumentos la variable del tamaño total de las carpetas.
el problema esta que mientras esta calculando tambien se ejecuta la funcion2.
  #8 (permalink)  
Antiguo 02/02/2012, 09:38
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: esperara que termine una funcion

Alguna idea?????
  #9 (permalink)  
Antiguo 02/02/2012, 11:43
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: esperara que termine una funcion

Es muy simple esto..
Si querés "ESPERAR" a que termine una función, tenés que asignarle un valor de RETORNO != void
(incluso a funciones re cursivas)
public void fx(){} ===> public ALGO fx(){}

y listo...
__________________
BadProgrammerException!
  #10 (permalink)  
Antiguo 02/02/2012, 14:51
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: esperara que termine una funcion

vale le agrege el return y me aparece un signo de admiracion



codigo:


int tamaño_fichero=0;

//me aparece un signo de admiracion que dice missing return statement
public int SizeFiles(File archivos_selec_paste){
// Sacamos todos los ficheros del directorio
if (archivos_selec_paste.isDirectory()){
String[] ficheros = archivos_selec_paste.list();
if(ficheros !=null){
for (int x=0;x<ficheros.length;x++) {


File asd = new File(ficheros[x]);
tamaño_ficheros_temp += asd.length();
System.out.println(tamaño_ficheros_temp);
// Por cada fichero volvemos a llamar recursivamente a la copa de directorios

SizeFiles(new File(archivos_selec_paste,ficheros[x]));

}


}
}else{

tamaño_ficheros_temp += archivos_selec_paste.length();
System.out.println(tamaño_ficheros_temp);
}
return tamaño_ficheros_temp;
}
  #11 (permalink)  
Antiguo 03/02/2012, 07:19
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: esperara que termine una funcion

tampoco la pavada flaco.. pensá 2 segundos antes de postear algo.

¿SE PUEDE SABER DONDE ESTÁ DECLARADO E INICIALIZADO ESTE ATRIBUTO tamaño_ficheros_temp?
Porque dentro del método no lo veo y si es un atributo de clase estaría mal diseñado
__________________
BadProgrammerException!
  #12 (permalink)  
Antiguo 03/02/2012, 07:29
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: esperara que termine una funcion

La llamada a la segunda función se debe hacer una vez se compruebe que no hay más llamadas que hacer a la función 1.

FiruzzZ parece que solo ha puesto parte del código, ese int se pudo declarar como atributo de la clase :|

Espero que no esté usando el package java IO asíncrono, porque en ese caso tendría que implementar funcion1(atributo1, ..., atributoN, funcionCallback()) donde funcionCallback() sería su funcion2();
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: funcion, termine
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:59.