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

  • Excel Functions

    Excel Functi

    4 NİSAN 2010
  • Max Lee

    Max Lee

    18 AĞUSTOS 2006
  • Vagrant Records

    Vagrant Reco

    8 Mayıs 2006