2011-12-09 14 views
11

Dados dos std :: hilos A y B, ¿hay alguna manera de que A pueda suspender B, sin ningún código personalizado en B para ese fin?Hilo de reposo de otro

Justificación: Actualmente, B es un algoritmo muy complicada, que debe salir limpiamente cuando A (un subproceso de supervisión) dice que, mediante la comprobación de algún indicador compartida de vez en cuando. El problema es que, para depuración, me gustaría saber exactamente en qué estado B es el momento en que A pide tal salida (por ejemplo, para ver dónde nos olvidamos de marcar la bandera compartida), por lo que me gustaría pausar B (para depurar) de A.

gracias de antemano! Broes

+1

Puede hacerlo a través del depurador. En Visual Studio, simplemente haga clic derecho en un hilo y seleccione 'congelar'. Estoy seguro de que GDB tiene capacidades similares – jalf

+0

Aunque técnicamente no es una "pausa", considere eliminar el proceso desde A con SIGSEGV y examinar el volcado del núcleo. – thiton

+0

@jalf: en ese caso sería casi imposible obtener el estado que A establece el indicador –

Respuesta

6

Depende del sistema. Windows tiene una función SuspendThread, pero admitiré que no sé mucho al respecto. En Unix, debería poder enviar una señal al hilo usando pthread_kill (que a pesar de su nombre, no mata al hilo, sino que simplemente envía una señal) y atraparlo en el hilo de destino, donde el manejador de señal puede llamar sleep.

+0

'SuspendThread()' es genial, pero alguien tendrá que llamar 'ResumeThread()' más tarde o el hilo se suspenderá para siempre. – sharptooth

+0

@sharptooth Ese alguien debería ser el hilo A, ya que lo suspendió, ¿no? –

+0

@VJovic: Sí, pero puede olvidarse de hacerlo. Sería genial si hubiera una función para suspender otro hilo durante un período de tiempo específico para que se reanude. No estoy al tanto de ninguno. – sharptooth

Cuestiones relacionadas