2009-09-15 2 views

ответ

11

Из основной нити звоните Thread.Join на каждой другой теме.

:

Например (EDIT Теперь вы указали C#, нет необходимости для платформы агностиком комментарий.):

Thread t1 = new Thread(FirstMethod).Start(); 
Thread t2 = new Thread(SecondMethod).Start(); 

t1.Join(); 
t2.Join(); 

Это не имеет значения, в каком порядке вы звоните Join в, если вы только хотите подождать, пока они все закончил. (Если вы хотите продолжить, когда любой из них закончили, вы должны попасть в область ожидания ручками.)

+0

В .NET 4.0 вы также можете получить выгоду от использования System.Threading.CountdownEvent и вызова «Сигнала» для дочерних потоков и «Подождите» в основном потоке или в Системе. Threading.Barrier и вызовите SignalAndWait для всех трех потоков. – Rick

0

Там хороший пример того, как сделать многопоточность в C# на MSDN

http://msdn.microsoft.com/en-us/library/aa645740(VS.71).aspx#vcwlkthreadingtutorialexample1creating

Если вы посмотрите на пример Mutex, он демонстрирует, что основной поток будет спать до тех пор, пока все дочерние потоки не будут завершены.

+0

или даже пример Mutex;) – Gwaredd

2
public delegate void AsyncTask(object state); 

public void Method1(object state) ..... 

public void Method2(object state) ..... 


public void RunAsyncAndWait(){ 

    AsyncTask ac1 = new AsyncTask(Method1); 
    AsyncTask ac2 = new AsyncTask(Method2); 

    WaitHandle[] waits = new WaitHandle[2]; 

    IAsyncResult r1 = ac1.BeginInvoke(someData , null , null); 
    IAsyncResult r2 = ac2.BeginInvoke(someData , null , null); 

    waits[0] = r1.AsyncWaitHandle; 
    waits[1] = r2.AsyncWaitHandle; 

    WaitHandle.WaitAll(waits); 

} 

Это работает, некоторые люди будут aruge, что если нить заканчивается первым будет ждать до бесконечности, но я старался, он работал всегда. Вы также можете указать время ожидания. И в первом параметре BeginInvoke значение передается внутри ваших методов.

0

Jeffry Richter of Wintellect имеет library for download, называемый библиотекой Power Threading. Я не использовал его сам, но это может быть полезно.

Смежные вопросы