Zapętlenie metody w wątku

0

Czy takie zapętlenie jest dobre???:

  while (true)
            {
                t1 = new Thread(() =>
                {
                    Metoda();

                });
                t1.Start();
                t1.Join();
            }

Czy jednak lepiej wrzucic ta petle do srodka tej metody ? W metodzie mam drugi wątek ktory wykonuje inna funkcje, jednak w tej wersji jak wyżej kod dziala, a po wrzuceniu pętli do środka metody coś się wiesza przy pracy.

2

Nie dziwota że coś się wiesza, skoro kod który pokazujesz w nieskończonej pętli co po chwilę uruchamia nowy Thread.

0

Inaczej on właśnie działa, tylko jak przeniose tą pętle do Metody() do srodka to wtedy cos sie wiesza, w sensie nie takim że wiesza tylko nie dostaje informacji zwrotnej. Da się to jakoś logistycznie zrobić żeby usunąć tego while przed threadem?

1

To powinno być coś takiego:

t1 = new Thread(() =>
{
    while(doJob)
    {
        Metoda();
        Thread.Sleep(200);
    }
}

Metoda wątku powinna mieć w sobie pętlę, w której dzieje się cała robota. Zmienna doJob to jakaś zmienna sterująca. Coś może ją zmieniać w zależności od tego, czy wątek powinien być zatrzymany, czy nie.
Sleep jest po to, żeby nie zarżnąć Ci procesora, bo bez tego właśnie zobaczysz zwiechy.

Wątek musisz uruchamiać gdzie indziej. Wątek kończy się po zakończeniu swojej metody.

0

Juhas, ok tylko pytanie teraz jeżeli powiedzmy doJob zmienie na false i watek sie zakończy, wywołam niżej drugi wątek ktory zrobi mi druga metode z flaga ustawiona na true i bede chciał zapętlić te dwie metody żeby przeskakiwały między sobą bez tworzenia nowych threadów. Da się cos takiego zrobić? Problem dotyczy komunikacji, w jednym watku ma być odbiór a w drugim wysyłanie.

0

Ja bym radził najpierw lepiej opanować zwykłe programowanie, zanim rzucisz się na wątki.
Załączony fragment kod i sposób zadawania pytania waskazuje na to, że nadal nie masz dopracowanych podstaw programowania.
Tymczasem programowanie wielowątkowe jest bardzo zdradliwe, bo błędy objawiają się w niedeterministyczny sposób.

0

Przerobilem lekko ten kod:
t1 = new Thread(() =>
{
while(true)
{
Czytaj();
}

        });
        t1.Start();

Teraz pytanie jak z drugiego watku wywolac metode Wyslij jeżeli while jest nieskonczony, a komunikacja miedzy nimi ma być cykliczna.

0
janekDzbanek napisał(a):

Przerobilem lekko ten kod:
t1 = new Thread(() =>
{
while(true)
{
Czytaj();
}

        });
        t1.Start();

Teraz pytanie jak z drugiego watku wywolac metode Wyslij jeżeli while jest nieskonczony, a komunikacja miedzy nimi ma być cykliczna.

Po prostu wywołać metode wyślij.jeden wątek odczytuje drugi wysyła,

0

Temat do zamknięcia, już sobie sam poradziłem.Dzięki za pomoc

0

Dodaj te sleepy na koniec (początek) wątków, bo będziesz miał zwieszki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1