using System;
using System.Threading ;
namespace Recetas.CSharp .Cap04 .R0412
{
public sealed class FinalizacionEjecucionThread
{
public static void Main( )
{
Console.Title = "--- Identificación Finalización Ejecución de un Thread ---" ;
Console.WriteLine ( ) ;
// Creación Thread:
Thread t = new Thread ( MostrarMensaje) ;
// Iniciar ejecución:
t.Start ( ) ;
// Bloqueo hasta finalización del método MostrarMensaje, o
// hasta que transcurra un tiempo de espera (2 segundos):
if ( ! t.Join ( 2000 ) )
{
Console.WriteLine ( "\n Agotado tiempo de espera de Join: {0}" ,
DateTime.Now .ToString ( "HH:mm:ss.ffff" )
) ;
}
// Muestra en pantalla el estado del thread:
Console.WriteLine ( "\n ¿Thread en ejecución?: {0}" , t.IsAlive .ToString ( ) ) ;
// Nuevo bloqueo hasta finalizar `MostrarMensaje`:
t.Join ( ) ;
// Imprime el estado actual del thread:
Console.WriteLine ( "\n ¿Thread en ejecución?: {0}" , t.IsAlive .ToString ( ) ) ;
Console.WriteLine ( "\n Presione Enter para finalizar.\n " ) ;
Console.ReadLine ( ) ;
}
// Muestra mensajes de estado de ejecución en pantalla:
private static void MostrarMensaje( )
{
for ( int i = 1 ; i < 5 ; ++ i)
{
Console.WriteLine ( "Registro de `MostrarMensaje`: {0}" ,
DateTime.Now .ToString ( "HH:mm:ss.ffff" )
) ;
// Pausa por 1 segundo:
Thread.Sleep ( 1000 ) ;
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwoKbmFtZXNwYWNlIFJlY2V0YXMuQ1NoYXJwLkNhcDA0LlIwNDEyCnsKICAgIHB1YmxpYyBzZWFsZWQgY2xhc3MgRmluYWxpemFjaW9uRWplY3VjaW9uVGhyZWFkCiAgICB7CiAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQogICAgICAgIHsKICAgICAgICAgICAgQ29uc29sZS5UaXRsZSA9ICItLS0gSWRlbnRpZmljYWNpw7NuIEZpbmFsaXphY2nDs24gRWplY3VjacOzbiBkZSB1biBUaHJlYWQgLS0tIjsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUgKCk7CiAgICAgICAgCiAgICAgICAgICAgIC8vIENyZWFjacOzbiBUaHJlYWQ6CiAgICAgICAgICAgIFRocmVhZCB0ID0gbmV3IFRocmVhZCAoTW9zdHJhck1lbnNhamUpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gSW5pY2lhciBlamVjdWNpw7NuOgogICAgICAgICAgICB0LlN0YXJ0KCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBCbG9xdWVvIGhhc3RhIGZpbmFsaXphY2nDs24gZGVsIG3DqXRvZG8gTW9zdHJhck1lbnNhamUsIG8KICAgICAgICAgICAgLy8gaGFzdGEgcXVlIHRyYW5zY3VycmEgdW4gdGllbXBvIGRlIGVzcGVyYSAoMiBzZWd1bmRvcyk6CiAgICAgICAgICAgIGlmICghdC5Kb2luICgyMDAwKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUgKCJcbkFnb3RhZG8gdGllbXBvIGRlIGVzcGVyYSBkZSBKb2luOiB7MH0iLCAKICAgICAgICAgICAgICAgICAgICBEYXRlVGltZS5Ob3cuVG9TdHJpbmcgKCJISDptbTpzcy5mZmZmIikKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIE11ZXN0cmEgZW4gcGFudGFsbGEgZWwgZXN0YWRvIGRlbCB0aHJlYWQ6CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lICgiXG7Cv1RocmVhZCBlbiBlamVjdWNpw7NuPzogezB9IiwgdC5Jc0FsaXZlLlRvU3RyaW5nKCkpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gTnVldm8gYmxvcXVlbyBoYXN0YSBmaW5hbGl6YXIgYE1vc3RyYXJNZW5zYWplYDoKICAgICAgICAgICAgdC5Kb2luKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBJbXByaW1lIGVsIGVzdGFkbyBhY3R1YWwgZGVsIHRocmVhZDoKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUgKCJcbsK/VGhyZWFkIGVuIGVqZWN1Y2nDs24/OiB7MH0iLCB0LklzQWxpdmUuVG9TdHJpbmcoKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSAoIlxuUHJlc2lvbmUgRW50ZXIgcGFyYSBmaW5hbGl6YXIuXG4iKTsKICAgICAgICAgICAgQ29uc29sZS5SZWFkTGluZSAoKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gTXVlc3RyYSBtZW5zYWplcyBkZSBlc3RhZG8gZGUgZWplY3VjacOzbiBlbiBwYW50YWxsYToKICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIE1vc3RyYXJNZW5zYWplKCkKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNTsgKytpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSAoIlJlZ2lzdHJvIGRlIGBNb3N0cmFyTWVuc2FqZWA6IHswfSIsIAogICAgICAgICAgICAgICAgICAgIERhdGVUaW1lLk5vdy5Ub1N0cmluZygiSEg6bW06c3MuZmZmZiIpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBQYXVzYSBwb3IgMSBzZWd1bmRvOgogICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwICgxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQ==