Hola a todos, tengo problemas para conseguir interrumpir la ejecución de un hilo que está "sleeping" y no entiendo por qué, adjunto el código:
void pr2(void){
try{
Object ^o=gcnew Object();
ParameterizedThreadStart ^ths=gcnew ParameterizedThreadStart(prueba2);
Thread th(ths);
th.Start(o);
th.Interrupt();
}catch(ThreadInterruptedException ^the){
//Hacer algo
}
}
void prueba2(Object ^o){
try{
Monitor::Enter(o);
for(int i=0;i<5;i++){
Thread::Sleep(1000);
}
}catch(ThreadInterruptedException ^thi){
throw gcnew ThreadInterruptedException();
}finally{
Monitor::Exit(o); //<==¿Esto está bien aquí?
}
}
El problema mas grave es que despues de "interrumpir" el hilo, el programa sigue en ejecución, lo tengo que terminar con el admin. de tareas.
El segundo problema es que en prueba2() capturo la excepción y la vuelvo a lanzar, pero pr2() no se entera y no entiendo por qué.
¿Qué es lo que hago mal?
Además, entiendo que lo de Monitor::Enter() es como el sychronized() de java, ¿me equivoco?.
En tal caso, para poder interrumpir la ejecución de un hilo sin que haya error, el hilo tiene que haber hecho Monitor::Enter() antes?
Gracias y saludos.