2010-06-08 2 views
0

le programme ci-dessous Tenir compteEst-ce multitâche?

myThread = new Thread(
         new ThreadStart(
          delegate 
          { 
           Method1(); 
           Method2(); 
          } 
          ) 
          ); 

est-ce que 2 fils sont appelés s'en parallèle (multi-tâches) ou un seul thread appelle les méthodes de manière séquentielle?

C'est urgent.

+3

Question sur la compréhension de base + "urgent" - est-ce une question d'examen? –

+1

@Konrad, devrions-nous composer un tag «urgent»?:) – bakkal

+1

@Bakkal: Bonne idée. Et toute question ayant cette étiquette est automatiquement cachée sur la page d'accueil. ;-) –

Répondre

6

C'est un seul thread.

Method2() ne sera pas appelé avant Method1() se termine.

Si vous voulez Method1() et Method2() d'être chacun dans un thread séparé que vous pouvez faire:

myThread1 = new Thread(new ThreadStart(Method1)); 
myThread2 = new Thread(new ThreadStart(Method2)); 

et les commencer:

myThread1.Start(); 
myThread2.Start(); 

maintenant les deux peuvent être en cours d'exécution simultanément.

Ressources utiles:

+0

Est-il possible de faire un multithread pour le même en utilisant le même style de délégué .. Je veux dire, si je tire 2 délégué de Sepearte, il sera multithread. – Newbie

+0

Pourriez-vous s'il vous plaît écrire un pseudo code (approximatif) pour des raisons de compréhension – Newbie

+0

NB. Dans le second cas, les méthodes anonymes (introduites par le mot-clé 'delegate') ne sont pas nécessaires:' new Thread (new ThreadStart (Method1)); ' –

4

est-ce que 2 fils deviennent appelés en parallèle (multi-tâches)

Vous pouvez le vérifier empiriquement: déclarer Methoda Method1 et Method2 ainsi:

public void Method1() { 
    for (int i = 0; i < 10; i++) { 
     System.Console.WriteLine ("Method1: {0}", i); 
     Thread.Sleep (2000); // 2 seconds 
    } 
} 

public void Method2() { 
    for (int i = 0; i < 10; i++) { 
     System.Console.WriteLine ("Method2: {0}", i); 
     Thread.Sleep (2000); // 2 seconds 
    } 
} 

Et puis voir si elles sont exécutées de façon séquentielle ou parallèle.

ou un seul thread appelle séquentiellement les méthodes ?

Vous pouvez le vérifier, par exemple, analytiquement. Combien d'objets Thread créez-vous? Quelle méthode passez-vous aux threads créés?

Vous créez un seul objet de discussion, et ce fil est d'exécuter cette méthode anonyme:

delegate { 
    Method1(); 
    Method2(); 
} 

Cette méthode anonyme, comme on peut le voir clairement, exécutera Method1, puis Method2.

1

C# 3: Créez et démarrez des fils séparés. Pour les attendre, appelez Thread.Join sur chacun d'entre eux. C# 4: Threading.Tasks.Parallel.Invoke (() => Method1(),() => Method2());

+0

Moyens (C# 3.0) pour le multitâche J'ai besoin de faire thread1 = Thread (new ThreadStart (Method1)); thread2 = Thread (nouveau ThreadStart (Method2)); puis thread1.join(); thread2.join(); – Newbie

+0

Oui, c'est correct. –

Questions connexes