2010-05-14 5 views

Respuesta

2

Bueno, usted puede prueba Thread.IsAlive - pero eso estará desactualizado tan pronto como lo haya probado, por supuesto. Puede mantener una lista de hilos "actualmente vivos" y eliminarlos de uno en uno cuando se detengan, durmiendo entre ejecuciones de prueba. Para obtener información más detallada, puede usar Thread.ThreadState.

¿Cuál es la imagen más grande aquí? ¿Qué estás tratando de lograr y por qué no quieres llamar al Thread.Join (potencialmente con un tiempo de espera)?

4

Si está usando .NET 4 puede usar el método Task Parallel Library y ContinueWhenAll.

Tendría que modificar sus hilos para que se representaran como Task. Las tareas son más fáciles de trabajar con los hilos. Por lo general, no tiene que preocuparse por las cosas de menor nivel, como lo obliga a hacer ahora, como programar o esperar a que se completen las cosas.

-1

¿Para qué fin? Diagnóstico? Console.WriteLine.

De lo contrario, use una variable global (como en: accesible para todos los hilos), increméntela cuando se inicie uno de sus hilos, disminuya cuando termine. Si es 0, todos los hilos terminaron el trabajo, pero debe tener cuidado de sincronizarlo correctamente, de lo contrario obtendrá falsos positivos. Después de iniciar las discusiones que hace una:

while (runningThreadsCount > 0) 
{ 
    // There are still working threads 
} 
+0

Gracias a todos por su ayuda. Usé Threadcount y resolvió mi problema. Utilicé do while loop: do { Console.WriteLine ("Número de subprocesos: {0}", ImageCompute.threadCount); } while (! (ImageCompute.threadCount == 0)); pero, esto es como contar el número de hilos. Pero tenemos algo así como funciones de devolución de llamada. Delegue lo que podemos adjuntar a cada hilo y se desencadena una vez que se completa. Gracias de nuevo. – Harsha

+0

Este enfoque es propenso a las condiciones de carrera debido a que el incremento y la disminución de un número entero no es una operación atómica (implica una lectura y una escritura). Dos hilos pueden leer el mismo valor, disminuirlo y volver a escribirlo, lo que hace que runningThreadsCount nunca se convierta en 0. –

+0

@Harsha Si desea hacer cosas como continuar el trabajo cuando los hilos terminan, eche un vistazo a la Biblioteca de tareas paralelas (revise mi responder). –

0

¿Qué hay de MyThread.ThreadState == System.Threading.ThreadState.Stopped?

+0

Debe ser '(MyThread.ThreadState & System.Threading.ThreadState.Stopped) == System.Threading.ThreadState.Stopped' ya que 'ThreadState' tiene FlagsAttrbiute y por lo tanto puede" contener "más valores. – Patrick

0

Puede usar la clase ThreadPool en lugar de una matriz, y usar el método 'GetAvailableThreads' para verificar si todos los subprocesos están disponibles. Ver:

ThreadPool class.

0

Hacer que los hilos vuelven a llamar a la clase que los haya iniciado en señalar que se hacen

Cuestiones relacionadas