2010-07-07 9 views
7

he creado un sub-hilo usando NSThread en hilo principalcómo detener un NSThread sub-hilo en iphone

NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(MyThread:) object:timer];

5 seg después, i utilizado [newThread Cancelar] en el hilo principal para detener el sub -thread, pero no funcionó,

Método MyThread: en newThread sigue trabajando

es así, cuál es la respuesta correcta para detener newThread, THX

realidad [newThread isCancelled] es sí, pero todavía estaba selector de MyThread Woking

+1

temporizador es ejemplo NSTimer – None

Respuesta

10

El método cancel sólo informa al hilo que se cancela (como usted ha mencionado cambios en la isCancelled a YES. Entonces es responsabilidad del hilo comprobar esto y salir. Por ejemplo, en el método de MyThread: usted puede hacer esto:

// At some checkpoint 
if([[NSThread currentThread] isCancelled]) { 
    /* do some clean up here */ 
    [NSThread exit]; 
} 

Usted debe hacer esta comprobación periódicamente, y la salida desde el interior de la rosca, como se muestra; de lo contrario, cancel no tiene ningún efecto.

+0

quiere decir un hilo sólo puede ser cancelado por sí mismo, no por otro hilo o hilo principal? – None

+1

@None: Significa que "cancelar" un hilo no hace lo que piensas. Cuando cancela un hilo, hace que 'isCancelled' devuelva' YES'. El hilo debería detener la ejecución. Sin embargo, no obliga al hilo a detener inmediatamente la ejecución; eso sería problemático si tuviera recursos abiertos. – Chuck

+0

@Chuck: Gracias, , pero si quiero detener un sub thread en el hilo principal, ¿cómo debo hacer? – None

1

- (void) cancelar

Discusión La semántica de este método son los mismos que los utilizados para el objeto NSOperation. Este método establece información de estado en el receptor que luego se refleja mediante el método isCancelled. Los subprocesos que admiten cancelación deben llamar periódicamente al método isCancelled para determinar si el subproceso se ha cancelado de hecho y salir si lo ha sido.

más información ver NSThread API Reference

Cuestiones relacionadas