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

  • BumbleDroid

    BumbleDroid

    18 EKİM 2010
  • Distractify

    Distractify

    1 Aralık 2011
  • Miles Fisher

    Miles Fisher

    8 NİSAN 2009