Autor
|
Tema: Orden de ejecucuion de sentencias (Leído 2,020 veces)
|
digimikeh
Desconectado
Mensajes: 191
|
Buenas Cuando estamos dentro de una funcion y llamamos a otra que pasa en la ejecucion? Ejemplo: Void sumar(){ // hace una cosa 1 // hace otra.cosa mas 2 MostrarMenuPrincipal(); // hace otra.cosa 3 // hace 4 Int valor; std::cout << "ingrese valor: "; Std::cin >> valor; Switch (valor){ case 1: Cout << "es uno "; Break; } } Void MostrarMenuPrincipal(){ // hace otras cosas 5 }
Que sucede? 1. Cuando se ejecuta la funcion sumar() va a llegar hasta la llamada a la funcion MostrarMenuPrincipal() y esperara a que esa funcion devuelva un valor o termine, por lo que la linea «hacer otra.cosa 3» no sera ejecutada al intante... 2. Cuando se ejecuta la funcion sumar() va a llegar hasta la llamada a la funcion MostrarMenuPrincipal() y al instante continuara paralelamente ejecutando ambas funciones.... Les pregunto esto ya que en un programa de practica que realice ayer me paso algo extraño, cuando la funcion que llamaba dentro de otra tenia un menu y una interaccion con el usuario mediante cin, la ejecucion de la funcion anterior (en este caso.sumar() ) no se ejecutaba mas quedaba bloqueada por la llamada a la nueva funcion, sin embargo, si esta nueva funcion no.tenia cin, la ejecutaba y luego volvia a la funcion anterior..
|
|
|
En línea
|
Dungeons & dragons; dragons.Attack();
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Ocurre 1. Sobre tu explicación no la entendí bien, reorganiza el texto. Pero supongo que te encontraste con el problema del vaciado de buffer stdout.
|
|
|
En línea
|
|
|
|
digimikeh
Desconectado
Mensajes: 191
|
Creo que tienes razon, hay algo en eso del buffer stdout.... Concretamente en el programa que estaba haciendo, hay algo asi: void ingresarNota(){ unsigned int opcion = 9; char * asignatura = new char[16]; cout << "Menu: " << endl; cout << "1- Matematicas " << endl; cout << "2- Historia " << endl; cout << "3- Ingles " << endl; cout << "Opcion (0 = Regresa al menu principal) : "; cin >> opcion; switch (opcion){ case 0: cout << string(100, '\n'); //limpiar pantalla mostrarMenuPrincipal(); break; case 1: strcpy (asignatura, "Matematicas"); break; case 2: strcpy (asignatura, "Historia"); break; case 3: strcpy (asignatura, "Ingles"); break; } cout << endl << "Asignatura seleccionada : " << asignatura << endl; //otra instruccion 1 //otra instruccion 2 //ciclo for 3 //ciclo for 4 } void mostrarMenuPrincipal(){ unsigned int opcion = 9; cout << "Menu Principal: " << endl; cout << "-----------------------" << endl; cout << "1- Ingrese Alumno nuevo " << endl; cout << "2- Seleccionar alumno " << endl; cout << "3- Ingrese nota" << endl; cout << "4- Salir" << endl; cout << "Opcion: "; cin >> opcion; switch (opcion){ case 1: nuevoAlumno(); break; case 2: seleccionaAlumno(); break; case 3: ingresarNota(); break; case 4: exit(0); } }
En el codigo, cuando el programa pasa por ingresarNota() y si yo selecciono 0, lo que hace es entrar a mostrarMenuPrincipal() pero alcanza a salir de switch-case y alcanza a ejecutar la linea "cout << endl << "Asignatura seleccionada : " << asignatura << endl" luego de eso ya no sigue ejecutando nada, es decir, la instruccion "//otra instruccion 1" ya no es ejecutada..
|
|
|
En línea
|
Dungeons & dragons; dragons.Attack();
|
|
|
Serapis
|
Hay funciones que se ejecutan al ser llamadas de forma asíncrona y otras que detienen la ejecución y no se ejecuta la siguiente instrucción hasta regresas de la llamada, esto es son síncronas.
- En general todas las llamadas internas son síncronas, ya que lo que ha de pasar después a menudo depende de lo que pase antes y necesita los valores de regreso (si hubiere alguno)... Uno luego decide si algo debe ser asíncrono, básicamente guarda datos y pone en marcha un temporizador, que cuando salte tomará dichos datos y los procese, la ejecución previa, en cambio sigue su curso...
- Y en general llamadas externas pueden ser asíncronas. No cuando estas llamadas sean para ejecutar funcionalidad especifica, si en cambio cuando es para por ejemplo ejecutar un programa, o cuestiones de hardware (el harware admite 'esperas', pero no le gustan las 'esperas indefinidas', razón por la que 'prefiere asíncrono y admita interrupciones). Luego es uno quien si lo precisa puede hacer que una llamada asíncrona se comporte como si fuera síncrona (esto es, forzar una espera hasta que aquella termine).
Lo que tiene que quedarte claro es cuando es razonable que una llamada (por lógica sea o deba ser síncrona y cuando asíncrona). Por ejemplo: Si pides entrada de datos del usuario es razonable que sea síncrono, porque si no estás obligando a que el usuario tenga que responder en un tiempo finito y muy breve... en general mientras el usuario no pulse la tecla 'enter', no se da por finalizada la entrada de datos. Puede optarse por funciones que leen carácter a carácter... pero vamos si se espera una introducción de más de un carácter, en general la técnica de devolución pasa por pulsar la tecla intro, a modo de indicador de finalización de la entrada del usuario.
Algo a tener en cuenta es la multitarea, que en realidad simula procesos asíncronos a cambio de conmutar entre tareas cada cierto intervalo de tiempo.
Es algo que con el tiempo a medida que avances en la programación, irás teniendo mucho más claro, de momento si estás empezando, básicamente considera que tu código se ejecuta de modo secuencial... y con el tiempo irás conociendo en detalle las excepciones y los motivos para ello.
|
|
« Última modificación: 18 Enero 2019, 18:07 pm por NEBIRE »
|
En línea
|
|
|
|
digimikeh
Desconectado
Mensajes: 191
|
Excelente amigos, gracias por la explicación...
Me ha quedado claro.
|
|
|
En línea
|
Dungeons & dragons; dragons.Attack();
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
problemilla con vb y las sentencias...
Programación Visual Basic
|
Hans el Topo
|
3
|
2,507
|
22 Junio 2006, 17:06 pm
por Hans el Topo
|
|
|
¿Donde van las sentencias imports ?
.NET (C#, VB.NET, ASP)
|
AlbertoBSD
|
1
|
1,978
|
17 Junio 2016, 18:12 pm
por DiegoAZL
|
|
|
Orden de las imágenes al imprimir no sigue orden carpeta
Windows
|
Esgrimidor
|
8
|
5,987
|
3 Julio 2017, 13:48 pm
por Randomize
|
|
|
Sentencias SQL
Bases de Datos
|
alvaro1975
|
1
|
1,970
|
14 Diciembre 2018, 17:10 pm
por Carloswaldo
|
|
|
Problema de ejecucuion con teclado musical y gstreamer y c++
Programación C/C++
|
mtoledo
|
6
|
3,199
|
22 Noviembre 2019, 19:17 pm
por kub0x
|
|