SORU
3 Temmuz 2012, Salı


C# Thread't uyku kazandı?

Bu kod var :

void Main()
{
    System.Timers.Timer t = new System.Timers.Timer (1000);
    t.Enabled=true;
    t.Elapsed = (sender, args) =>c();
    Console.ReadLine();

}

int h=0;
public void c()
{
    h  ;
    new Thread(() => doWork(h)).Start();
}

public void doWork(int h)
{
    Thread.Sleep(3000);
    h.Dump();
}

Eğer aralığı 1000 ms ise ne olacağını görmek istedim ve iş süreci 3000 ms.

Ancak garip bir davranış gördüm 3000 ms gecikme oluşursadece başlangıçta!

Nasıl doWork her uyku 3000 ms yapabilir miyim?

Burada gördüğünüz gibi, başlangıçta 3 saniyelik bir gecikme var, ve sonra 1 saniye her şey dolaşır.

enter image description here

CEVAP
3 Temmuz 2012, Salı


Her zaman, zaman dilimleri, biraz uyku yapmak için bir iplik başlamak; bu iş parçacığı tamamen izole ve zamanlayıcı ateş her saniye devam edecek. Aslında, zamanlayıcı her saniye patlarbilec() Sleep(3000) hareket.

Şu anda ne var:

1000 tick (start thread A)
2000 tick (start thread B)
3000 tick (start thread C)
4000 tick (start thread D, A prints line)
5000 tick (start thread E, B prints line)
6000 tick (start thread F, C prints line)
7000 tick (start thread G, D prints line)
8000 tick (start thread H, E prints line)
...

Yapmaya çalıştığınız şey ne belli değil. Bu ateş istemediğin zaman sayacı devre dışı bırakmak ve yeniden bir kez hazır devam edebilirsin, ama Sleep() amacı nedir belli değil. Başka bir seçenek Sleep() while sadece bir döngü. Basit ve çok sayıda iş parçacığı anlamına gelmez.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Project Mooncircle

    Project Moon

    6 Aralık 2009
  • Rachel Talbott

    Rachel Talbo

    26 Ocak 2011
  • Samantha Crain

    Samantha Cra

    30 EKİM 2008