• Sábado 14 de Diciembre de 2024, 14:28

Autor Tema:  Problema Con Simulacion De Un Reloj  (Leído 3059 veces)

difer1125

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Problema Con Simulacion De Un Reloj
« en: Domingo 1 de Abril de 2007, 19:21 »
0
hola amigos el problema es que estay tratando de simular uen realidad un cronometro, pero es que tiene que tenar la opcion de iniciar, parar y salir cuando el usuario lo desee
y el problema es que no se para que realice los dos procesos a la vez, que ejecute los for del reloj y a la vez espere los datos para que el usuario decida cuando parara o reiniciar o salir de cronometro, por ahi eschuche que eso se hace con threads pero no se como. este es un ejemplo, aunque sencillo pero no es el que estoy construyendo pero trabaja igual


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int hora,min,seg; // Declarando as variáveis.
  int i;
  int u = 0;
  hora = 0, min = 0, seg = 0; // Inicializando variáveis.

  while (hora < 24)
  {
    while (min < 60)
    {          
      while (seg < 60)
      {    
        printf("\n%.2d:%.2d:%.2d",hora,min,seg);            
        for (i = 0; i <= 10000000; i++)                            
          u++;        
        seg = seg + 1;          
        system("clear");
      }
      seg = 0; // Resetando segundo.
      min = min + 1; // Incrementando minuto.      
    }
    min = 0;
    hora = hora + 1; // Incrementando hora.                
   
    /* Reseta hora para que o loop seja continuo */
    if (hora > 23)
    {
      hora = 0;
    }        
  }
  return(0);
}

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #1 en: Domingo 1 de Abril de 2007, 19:30 »
0
Lo que necesitas es hacer un proceso hijo, la funcion fork
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #2 en: Domingo 1 de Abril de 2007, 19:39 »
0
No necesariamente tiene que crear otro proceso sino que tambien puede usar hilos (threads) como el mismo menciono.

Si programas bajo Windows fork no existe pero si CreateThread:
http://msdn2.microsoft.com/en-us/library/ms682453.aspx

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

difer1125

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #3 en: Lunes 2 de Abril de 2007, 01:54 »
0
amigos pero no tengo ni idea de como implementarla ya que nunca la he utilizado, me pueden dar un ejemplo

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #4 en: Lunes 2 de Abril de 2007, 07:15 »
0
¿Leiste el enlace que te deje?

Example Code

For an example, see Creating Threads.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #5 en: Lunes 2 de Abril de 2007, 23:10 »
0
Entonces, sabiendo que Windows tiene implementado el sistam POSIX :

podes ver este ejmplo y su documentacion.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #6 en: Lunes 2 de Abril de 2007, 23:21 »
0
Cita de: "su -"
Entonces, sabiendo que Windows tiene implementado el sistam POSIX :

podes ver este ejmplo y su documentacion.
Lo que dice ahi es que hay implementaciones para Windows y no que Windows implemente POSIX, en realidad este S.O. soporta un subconjunto muy reducido del standard POSIX y para hacer uso de esas funciones hay que generar ejecutables para el subsystem Posix que no permite acceder a la API de Windows asi como asi.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #7 en: Martes 3 de Abril de 2007, 01:23 »
0
Cita de: "Eternal Idol"
Cita de: "su -"
Entonces, sabiendo que Windows tiene implementado el sistam POSIX :

podes ver este ejmplo y su documentacion.
Lo que dice ahi es que hay implementaciones para Windows y no que Windows implemente POSIX, en realidad este S.O. soporta un subconjunto muy reducido del standard POSIX y para hacer uso de esas funciones hay que generar ejecutables para el subsystem Posix que no permite acceder a la API de Windows asi como asi.
 :D  Gracias por aclarar esto, pero entonces...
Esos subconjuntos son precticamente inutiles ?  :blink:
SI es asi, para que lo ponen en el S.O.?  :unsure:
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problema Con Simulacion De Un Reloj
« Respuesta #8 en: Martes 3 de Abril de 2007, 03:05 »
0
Cita de: "Eternal Idol"
Cita de: "su -"
Entonces, sabiendo que Windows tiene implementado el sistam POSIX :

podes ver este ejmplo y su documentacion.
Lo que dice ahi es que hay implementaciones para Windows y no que Windows implemente POSIX, en realidad este S.O. soporta un subconjunto muy reducido del standard POSIX y para hacer uso de esas funciones hay que generar ejecutables para el subsystem Posix que no permite acceder a la API de Windows asi como asi.
Debe de ser muy complicado hacer que interactuen... no lo dudo, pero no es necesario que interactuen.

puedes hacer aplicaciones posix y ejecutarlas en windows teniendo en cuenta:

http://support.microsoft.com/kb/q149902/

•    Las aplicaciones con POSIX sólo inician otras aplicaciones POSIX. Ellos no pueden iniciar aplicaciones DOS, OS/2, Win16 o Win32.
•   Las aplicaciones con POSIX no pueden llamar a ningún API Win32. No tienen ningún acceso a DDE OLE, la memoria asignó archivos, canalización con nombre, socket de ventanas y otras características Win32.
•   Las aplicaciones con POSIX no pueden cargar un DLL para Win32 implícitamente o explícitamente.
•   Las aplicaciones con POSIX no tienen acceso a cualquier API de red como canalizaciones o socket. No forman red en cuenta pero pueden tener acceso a archivos a través de la red.
•   Las aplicaciones con POSIX no ofrecen ninguna compatibilidad de origen de depurador de nivel. No puede utilizar Windbg o el depurador de Microsoft Visual C++ para depurar aplicaciones POSIX en Windows NT.

Para poder ejecutar aplicaciones POSIX.1 se debe tener en la maquina los siguientes archivos:

Psxss.exe El server del subsistema posix
Posix.exe El administrodor de sesiones de la consola POSIX
Psxdll.dll  La libreria dinamica de POSIX

No viene por defecto en el sistema pero por ejemplo para windows 2000 se consiguen en el Windows 2000 Professional Resource Kit.

Mas información al respecto:

http://www.microsoft.com/technet/archive/n...p.mspx?mfr=true

donde dice que hay una forma de comunicar las API una forma no muy limpia pero ahi esta:
Citar
Communicating with Other Subsystems

Windows NT supports a common command processor that can run commands from any subsystem. In addition, Windows NT supports piped input and output between commands of different subsystems. For example, you could run the ls utility and pipe the results through the more command to the console:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

difer1125

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #9 en: Martes 3 de Abril de 2007, 03:23 »
0
voy a tratar de implementarlo pero la verdad aun no me que muy claro, como funcionaria en mi ejemplo del cronometro

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #10 en: Martes 3 de Abril de 2007, 08:18 »
0
Cita de: "su -"
:D  Gracias por aclarar esto, pero entonces...
Esos subconjuntos son precticamente inutiles ?  :blink:
SI es asi, para que lo ponen en el S.O.?  :unsure:
La realidad indica que es inutil y por eso se dejo de distribuir, esta es la alternativa:
http://en.wikipedia.org/wiki/Interix

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #11 en: Martes 3 de Abril de 2007, 09:08 »
0
Cita de: "JuanK"
Debe de ser muy complicado hacer que interactuen... no lo dudo, pero no es necesario que interactuen.
El punto es que hay muy pocas funciones y entonces resulta inutil sin usar la API de Windows por eso es preferible usar Interix o escribir nuestra propia libreria si realmente nos interesa.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problema Con Simulacion De Un Reloj
« Respuesta #12 en: Martes 3 de Abril de 2007, 18:05 »
0
veo, usar entonces cygwin también sera posible al menos para lo básico.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Problema Con Simulacion De Un Reloj
« Respuesta #13 en: Jueves 5 de Abril de 2007, 17:47 »
0
saliendo del multithread y todo eso... la opción mas simple (para la complejidad de tu ejercicio) es mediante la función getc ()... la cual la insertás dentro del bucle y no detiene la ejecución del programa hasta que el usuario presione una tecla (la que vos quieras que sea para parar, continuar, terminar, etc), lo podrías implementar más o menos así:

Código: Text
  1.  
  2. for(;;;){
  3.  
  4.    //acá vendría la implementación del cronómetro...
  5.  
  6.    if(getc (stdin)=='&#092;n'){// el &#34;/n&#34; es la tecla enter
  7.       break;//salis del bucle...
  8.    }
  9.  
  10. }
  11.  
  12.  

S2

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #14 en: Jueves 5 de Abril de 2007, 18:08 »
0
Cita de: "Karman"
saliendo del multithread y todo eso... la opción mas simple (para la complejidad de tu ejercicio) es mediante la función getc ()... la cual la insertás dentro del bucle y no detiene la ejecución del programa hasta que el usuario presione una tecla (la que vos quieras que sea para parar, continuar, terminar, etc), lo podrías implementar más o menos así
Si lo que decis fuera cierto esto al arrancar escribiria muchas veces abc:

Código: Text
  1.  
  2.   for(;;)
  3.   {
  4.     printf(&#34;abc&#092;r&#092;n&#34;);
  5.     if(getc (stdin)=='&#092;n'){
  6.        break;
  7.     }
  8.   }
  9.  
  10.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Problema Con Simulacion De Un Reloj
« Respuesta #15 en: Jueves 5 de Abril de 2007, 18:15 »
0
tene razón... pero me parece que había una función standart para emular kbhit()... tendría que reveer mis códigos fuentes... je

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #16 en: Jueves 5 de Abril de 2007, 18:18 »
0
Cita de: "Karman"
tene razón... pero me parece que había una función standart para emular kbhit()... tendría que reveer mis códigos fuentes... je
Que yo sepa no la hay, obviamente que se puede hacer usando los servicios del S.O. bajo el cual trabajemos.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

difer1125

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Problema Con Simulacion De Un Reloj
« Respuesta #17 en: Sábado 14 de Abril de 2007, 17:14 »
0
amigos pueden darme un ejemplo como podria utilizar la funcion kbhit() dentro de mi programa para cuando el usuario pulse d se detenga, cuando pulse i inicie, y cuando pulse r se reanude.

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Problema Con Simulacion De Un Reloj
« Respuesta #18 en: Sábado 14 de Abril de 2007, 20:50 »
0
Código: Text
  1.  
  2. char op=0;
  3.  
  4. for(;;;){  
  5.  
  6.    if(kbhit())
  7.       op=getch();
  8.  
  9.    if(op){
  10.    switch(op){
  11.       case 'd':
  12.          // se hace algo
  13.       break;
  14.       case 'i':
  15.          // se hace algo
  16.       break;
  17.       case 'r':
  18.          // se hace algo
  19.       break;
  20.       default:// no hacemos nada...
  21.       break;
  22.    }
  23.    op=0;
  24.    }
  25.  
  26.    //se ejecuta el código
  27. }
  28.  
  29.  
  30.  

S2