Creación de hilos pasando por los estados más comúnes en C#

Iniciado por LightHugh, 5 Noviembre 2009, 07:14 AM

0 Miembros y 1 Visitante están viendo este tema.

LightHugh

Nevamente molestando a la gente de este foro, y bien, resulta que me han pedido realizar un programa en C#  que ejecute la inicialización de un hilo (Thread) pero notificando que tiene que pasar por los estados .Start();  .Abort();  .Sleep();  .Join(); IsAlive(); y nuevamente que me mande un mensaje de que a pesar de haberlo inicializado una vez pueda repetir ese ciclo, es decir, que pueda inicializarlo otra vez y empezar nuevamente, me mencionaban que era necesario un do-while para que haga los recorridos pero es ahí donde yo me atoré porque hago la inicialización y llego hasta el sleep pero cuando quiero inicializarlo otra vez me manda un mensaje de error diciendo que el hilo ha sido inicializado... espero que lo masters de la programación puedan hecharme una salvadita a este gran problema y de antemano se los agradeceré.  Larga vida al foro ! ;D

MANULOMM

pon un poco de tu codigo para entender bien como lo tienes.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


LightHugh

Esto es parte de mi código, sé que tiene errores de sintaxis aún por ello pido de su ayuda.

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace CHilos1
{
    public class CHilo1
    {
        private Thread hilo;//identificador del hilo
        public CHilo1() : this(null) { }
        public CHilo1(string nombreHilo)
        {
            hilo = new Thread(ProcHilo);
            if (nombreHilo != null) hilo.Name = nombreHilo;
            //iniciar el hilo
           // hilo.Start();

        }
        public Thread HiloSubyacente
        {
            get { return hilo; }//referencia
        }
        private void ProcHilo()
        {
           // Console.WriteLine("el hilo finalizo");
          //  Console.ReadKey();

        }

        static void Main(string[] args) // cuerpo principal
        {
            CHilo1 entra = new CHilo1();
            bool estado;
            estado = entra.HiloSubyacente.IsAlive;
            int op;
            //String resp;
            try{
               // do{
                    Console.WriteLine("Menu");
                    Console.WriteLine("Que deseas hacer:  \n(1) Abortar \n(2) Join \n(3) Sleep \n(4) Iniciar ");
                    op = Convert.ToInt16(System.Console.Read());
                    switch(op){
                        case 1:
                            if (estado == true)
                           
                                Console.WriteLine("El hilo ya esta activo");
                           
                            else
                            {
                                entra.HiloSubyacente.Start();
                                Console.WriteLine("El hilo se inicio");
                                estado = true;
                            }
                            break;
                        case 2:
                            if (estado == true)
                                Console.WriteLine("El hilo ya esta activo");
                            else
                            {
                                entra.HiloSubyacente.Join();
                                Console.WriteLine("el hilo ha muerto");
                                estado = true;
                            }
                            break;
                        case 3:
                            Thread.Sleep(500);
                            Console.WriteLine("esta dormido");
                            break;
                    }
               // }while(true);
                }
                catch(Exception e){
                    Console.WriteLine(e);

                }
           
        }//fin del main
    }//fin de la clase
}// fin del name space

[D4N93R]

No tengo Visual Studio acá, por lo que no puedo correrlo, lo miré un poco, pero podrías explicar cual es la finalidad de la aplicación?

Un saludo

MazarD

Cita de: D4N93R en  7 Diciembre 2009, 00:11 AM
No tengo Visual Studio acá, por lo que no puedo correrlo, lo miré un poco, pero podrías explicar cual es la finalidad de la aplicación?

Un saludo

Seguramente será algún trabajo de clase para aprender como funcionan los hilos.


Cita de: LightHugh en  5 Noviembre 2009, 07:14 AM
Nevamente molestando a la gente de este foro, y bien, resulta que me han pedido realizar un programa en C# que ejecute la inicialización de un hilo (Thread) pero notificando que tiene que pasar por los estados .Start(); .Abort(); .Sleep(); .Join(); IsAlive(); y nuevamente que me mande un mensaje de que a pesar de haberlo inicializado una vez pueda repetir ese ciclo, es decir, que pueda inicializarlo otra vez y empezar nuevamente, me mencionaban que era necesario un do-while para que haga los recorridos pero es ahí donde yo me atoré porque hago la inicialización y llego hasta el sleep pero cuando quiero inicializarlo otra vez me manda un mensaje de error diciendo que el hilo ha sido inicializado... espero que lo masters de la programación puedan hecharme una salvadita a este gran problema y de antemano se los agradeceré. Larga vida al foro ! ;D
A simple vista en tu código:
-La inicialización del hilo está mal, el argumento debe ser un ThreadStart, quedaría: hilo=new Thread(new ThreadStart(ProcHilo));
-ProcHilo no hace nada por lo tanto cuando se ejecute terminará al instante y el .abort, .sleep, .join y demás no tendrán sentido, deberías poner un bucle infinito dentro y hacer el catch de la excepción cuando el hilo principal llame a .abort
-En el hilo principal estas instanciando cHilo1() sin parámetros pero cuando se crea Thread es en el constructor con parámetro nombreHilo, nunca se crea Thread
-public CHilo1() : this(null) { } Hereda de ella misma? :S para que?
-Sobre lo del bucle que recorra todo en orden, el orden a seguir sería:
Start //Inicia el hilo
Sleep //Pausa el hilo durante cierto tiempo
Abort //Provoca excepción en el hilo para finalizarlo
Join //Bloquea el hilo principal hasta que el hilo finaliza

Saludos!
-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
http://twitter.com/MazarD
irc://irc.freenode.org/elhacker.net

[D4N93R]

Bien MazarD,

Yo no tenia mucho tiempo pa leer bien el código..

La expoliación es correcta..

MazarD

Cita de: D4N93R en  8 Diciembre 2009, 02:20 AM
Bien MazarD,

Yo no tenia mucho tiempo pa leer bien el código..

La expoliación es correcta..
De nada  :)

Saludos!
-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
http://twitter.com/MazarD
irc://irc.freenode.org/elhacker.net