Многопоточность в C#
Я использую следующий пример .
using System; using System.Threading; public class MyThread { public void Thread1() { for (int i = 0; i < 10; i++) { Console.WriteLine("Hello world " + i); Thread.Sleep(1); } } } public class MyClass { public static void Main() { Console.WriteLine("Before start thread"); MyThread thr1 = new MyThread(); MyThread thr2 = new MyThread(); Thread tid1 = new Thread(new ThreadStart(thr1.Thread1) ); Thread tid2 = new Thread(new ThreadStart(thr2.Thread1) ); tid1.Start(); tid2.Start(); } }
Это работает так.
выход :
Before start thread Hello world 0 Hello world 0 Hello world 1 Hello world 1 Hello world 2 Hello world 2 Hello world 3 Hello world 3 Hello world 4 Hello world 4 Hello world 5 Hello world 5 Hello world 6 Hello world 6 Hello world 7 Hello world 7 Hello world 8 Hello world 8 Hello world 9 Hello world 9
Он печатает i из первого цикла for и спит в течение 1 секунды, переходя ко второму циклу for.Он печатает i со второго для цикла сна в течение 1 секунды и переходит к первому.Я не хочу, чтобы он переключался на контекст после каждой печати.Я хочу,чтобы через определенное время после печати некоторого значения i, спать в течение некоторого времени в течение этого периода печати значения i из второго цикла.После этого истекает снова переход к первому циклу.например: предполагается,что он печатает от 1 до 2-10 от первого цикла for и спит переход ко второму, он может печатать от 1 до 2-10 от второго цикла for.и перейти к первому циклу.Значение i Из первого цикла может быть не одинаковым для второго.
Что я уже пробовал:
using System; using System.Threading; public class MyThread { public void Thread1() { for (int i = 0; i < 10; i++) { Console.WriteLine("Hello world " + i); Thread.Sleep(1); } } } public class MyClass { public static void Main() { Console.WriteLine("Before start thread"); MyThread thr1 = new MyThread(); MyThread thr2 = new MyThread(); Thread tid1 = new Thread(new ThreadStart(thr1.Thread1) ); Thread tid2 = new Thread(new ThreadStart(thr2.Thread1) ); tid1.Start(); tid2.Start(); } }
Richard MacCutchan
Измените вызовы в спящий режим, чтобы использовать случайные значения.