PDA

View Full Version : سوال: چجوری میشه همه Threadهارو Abort کرد؟



hossein_ignore
یک شنبه 13 تیر 1389, 14:14 عصر
سلام .
همین دیگه! چجوری میشه همه Threadهارو Abort کرد؟

navidkhalilian
سه شنبه 15 تیر 1389, 17:15 عصر
راه اول اینه که thread ها رو به صورت آرایه تعریف کنی و بعد با یه حلقه for همه رو کنترل کنی.
مثال:



using System;
using System.Threading;
using System.Collections.Generic;

public class TaskQueue : IDisposable {
object locker = new object();
Thread[] workers;
Queue<string> taskQ = new Queue<string>();

public TaskQueue (int workerCount) {
workers = new Thread [workerCount];

// Create and start a separate thread for each worker
for (int i = 0; i < workerCount; i++)
(workers = new Thread (Consume)).Start();
}

public void Dispose() {
// Enqueue one null task per worker to make each exit.
foreach (Thread worker in workers) EnqueueTask (null);
foreach (Thread worker in workers) worker.Join();
}

public void EnqueueTask (string task) {
lock (locker) {
taskQ.Enqueue (task);
[I]Monitor.PulseAll (locker);
}
}

void Consume() {
while (true) {
string task;
lock (locker) {
while (taskQ.Count == 0) Monitor.Wait (locker);
task = taskQ.Dequeue();
}
if (task == null) return; // This signals our exit
Console.Write (task);
Thread.Sleep (1000); // Simulate time-consuming task
}
}
}


راه بعدی اینه که یک متغیر سراسری از نوع bool تعریف کنی و داخل thread ها یک شرط بگزاری که اگر متغیر من false بود thread را stop کن و زمانی که خواستی thread ها را stop کنی ونغیر را برابر false قرار بدی.البته راه های دیگری هم هست.