Código
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.
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 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.