Mam listę zawierającą losowe liczby całkowite. Chciałbym nauczyć się korzystać z wątków i przy okazji sprawdzić czas w jakim ustalana jest liczba elementów parzystych bez wykorzystania wątków i z wykorzystaniem wątków(z wykorzystaniem wątków to robię tak, że jeden wątek sprawdza co drugi element listy sprawdzając czy jest parzysty zaczynając od indeksu=0, a drugi watek także sprawdza co drugi element listy zaczynając od indeksu=1). I chciałem żeby jeden wątek zwracał ile znalazł elementów parzystych i drugi wątek żeby zwracał ile znalazł elementów parzystych i następnie bym zsumował otrzymane wartości i otrzymał łączną ilość elementów parzystych w liście z wykorzystaniem wątków. Ale zdaje się, że metody wątków nie mogą zwracać wartości więc nie wiem jak to zrobić :( Dodam jeszcze, że chciałbym to zrobić korzystając z BEZPOŚREDNIEGO używania wątków bez żadnych rzeczy, które występują tylko w c# jak np. delegacje asynchroniczne, żeby potem łatwo było przerobić ten kod do wykorzystania w innych językach. Jak to mogę zrobić skoro metody wątków nie mogą zwracać wartości ?
Program wygląda w ten sposób:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<int> lista = new List<int>();
const int rozmiar = 50000000;
Random losowa = new Random();
for (int i=0; i < rozmiar; i++)
{
lista.Add(losowa.Next(10000));
}
DateTime startTime1 = DateTime.Now;
int a = 0;
for (int i = 0; i < lista.Count(); i++)
{
if (lista[i] % 2 == 0) a++;
}
DateTime stopTime1 = DateTime.Now;
TimeSpan roznica1 = stopTime1 - startTime1;
Console.WriteLine("Ilosc elementow parzystych bez watkow: " + a);
Console.WriteLine("Czas wykonania bez watkow w ms: " + roznica1.TotalMilliseconds);
DateTime startTime2 = DateTime.Now;
Thread t1 = new Thread(new ParameterizedThreadStart(watek1));
Thread t2 = new Thread(new ParameterizedThreadStart(watek2));
t1.Start(lista);
t2.Start(lista);
if (t1.IsAlive) .
{
t1.Abort();
}
if (t2.IsAlive)
{
t2.Abort();
}
DateTime stopTime2 = DateTime.Now;
TimeSpan roznica2 = stopTime2 - startTime2;
Console.WriteLine("Czas wykonania z watkami w ms: " + roznica2.TotalMilliseconds);
Console.Read();
}
static private void watek1(object listaa)
{
List<int> lista = (List<int>)listaa;
int a=0;
for (int i = 0; i < lista.Count(); i = i + 2)
{
if (lista[i] % 2 == 0) a++;
Thread.Sleep(1);
}
}
static private void watek2(object listaa)
{
List<int> lista = (List<int>)listaa;
int b = 0;
for (int i = 1; i < lista.Count(); i = i + 2)
{
if (lista[i] % 2 == 0) b++;
Thread.Sleep(1);
}
}
}
}