• Martes 14 de Mayo de 2024, 20:25

Autor Tema:  Codigo similar al kbhit()  (Leído 6001 veces)

KoRn_jsg

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: bo
    • Ver Perfil
Codigo similar al kbhit()
« en: Martes 11 de Mayo de 2010, 01:53 »
0
Muy buenas a todos los foreros, pues en esta ocacion mi gran interrogativa si esque existe alguna metodo en C# parecido al kbhit(); del C++
PD: estoy usando el Visual Studio 2008 C# aplicacion de MSDOS


espero me puedan ayudar muchas gracias por sus respuestas!!!  :alien:

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Codigo similar al kbhit()
« Respuesta #1 en: Martes 11 de Mayo de 2010, 16:30 »
0
Si por ejemplo usabas la función en un ciclo while, tipo:
Código: C++
  1.  
  2. cprintf( "El programa está a la espera de registrar una tecla pulsada.rn");
  3. while( !kbhit() );
  4.  
un reemplazo posible podria ser el:
Código: C#
  1. Console.ReadKey();
  2.  

en este caso el programa no avanza hasta que se presione una tecla.

Espero te sea util.

KoRn_jsg

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: bo
    • Ver Perfil
Re: Codigo similar al kbhit()
« Respuesta #2 en: Martes 11 de Mayo de 2010, 21:15 »
0
En si lo que necesito hacer es que un ciclo de vueltas mientras no se preciosa una tecla especifica que yo elija es decir que si no presiono 's' entonces sigue haciendo las instrucciones que estan dentro de mi while....me dejo entender?

Pero de todos modos gracias por tratar de solucionar mi problema.....CUidate un abrazo!!!

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Codigo similar al kbhit()
« Respuesta #3 en: Miércoles 12 de Mayo de 2010, 17:52 »
0
siguiendo con el mismo metodo que antes, el readkey y sabiendo lo que realmente necesitas, te pongo un ejemplo de una de las posibles maneras de hacer lo que necesitas:

Código: C#
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Threading;
  5.  
  6. namespace ConsoleApplication10
  7. {
  8.     class Program
  9.     {
  10.         static bool bandera = true;
  11.  
  12.         static void Main(string[] args)
  13.         {
  14.             Thread Hilo = new Thread(hilo); //creo un nuevo hilo
  15.             Hilo.Start();                   // Lo lanzo
  16.  
  17.  
  18.             //programa que va contando los segundos y los muestra en pantalla...
  19.  
  20.             int contador = 0;               //variable en segundos
  21.             while (bandera)                 //mientras la bandera sea true el bucle continuara
  22.             {
  23.                 Console.Clear();                //borro la pantalla
  24.                 Console.WriteLine(contador);    //imprimo en pantalla el valor del contador
  25.                 contador++;                     //lo incremento
  26.                 Thread.Sleep(1000);             //me paro en este punto durante 1 segundo
  27.             }
  28.             Console.WriteLine("Presionó 's'. Pulse ahora cualquier tecla para cerrar la aplicación");
  29.             Console.ReadKey();
  30.         }
  31.  
  32.  
  33.         //este es el hilo que se encarga de leer la tecla presionada
  34.         static void hilo()
  35.         {            
  36.             while (true)
  37.             {
  38.                 ConsoleKeyInfo tecla = Console.ReadKey(true); //leemos cualquier tecla presionada
  39.                 if (tecla.KeyChar == 115)   //si es 's' minuscula, 115 en ascii... *leer edit
  40.                 {
  41.                     bandera = false;        //cambiamos el estado de la bandera y
  42.                     break;                  //salimos del hilo
  43.                 }
  44.                
  45.             }
  46.         }
  47.     }
  48. }
  49.  
  50.  

edito:
decirte que tambien te servira:
Código: C#
  1. if (tecla.KeyChar=='s')
  2.  
o
Código: C#
  1. if (tecla.Key == ConsoleKey.S)
  2.  
en este ultimo caso te leeria la 's' tanto minuscula como mayuscula, en los otros 2 tendiras que especificar ambos casos si lo quisieras.

Espero te sirva. Un saludo

KoRn_jsg

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: bo
    • Ver Perfil
Re: Codigo similar al kbhit()
« Respuesta #4 en: Jueves 13 de Mayo de 2010, 01:28 »
0
Compañero.....muchas gracias por tu mega aportazo...me sirvio de mucho....enserio gracias!!!.....

KoRn_jsg

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: bo
    • Ver Perfil
Re: Codigo similar al kbhit()
« Respuesta #5 en: Lunes 24 de Mayo de 2010, 22:34 »
0
Una pregunta mas compañero espero puedas responder....

en tu solucion que posteaste es mientras que no se presione la tecla 's' entonces no hace nada, y cuando presiona entra al ciclo, mi pregunta es como hacer para que se ejecute las instrucciones que estan dentro del ciclo mientras no se presione una tecla??....ubicas la idea??.....

Muchas gracias de antemano por todo!!!

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Codigo similar al kbhit()
« Respuesta #6 en: Miércoles 26 de Mayo de 2010, 16:53 »
0
Si no entendi mal lo que preguntas el codigo que postee hace lo que estas preguntando. Seguramente te estes equivocando de ciclo. Si te fijas, en el metodo Main hay un bucle " while (bandera)". Ahi es donde tienes que meter tu codigo. Este ciclo se repite mientras no se presione la tecla "s".

Si te fijas, un poco mas abajo en el metodo "hilo()", ahi te encuentras otro while(true). Este bucle solo se encarga de leer las teclas presionadas. Cada vez que se presiona una tecla, salta al "if"  este compara la tecla presionada, si es la deseada, en este caso "s" cambia el valor de "bandera" haciendo que el ciclo while(bandera) deje de repetirse. A la vez, con el break; salimos del ciclo while(true) y se cierra el hilo creado.   Si la tecla no fuera la "s" entonces no entra en el 'if' y vuelve al principio a la espera que se presione una tecla.

Espero sea esa la duda, sino avisa. Saludos