C# ve Windows Gerçek Zamanlılık Sounsalı

Başlatan berat23, 17 Haziran 2016, 10:19:01

berat23

C# ile yaptığım bazı programlarda windows için hızlı thread'ler var(100hz mesela). Thread.sleep methodu malumdur ki bana real time çalışma vaadetmiyor, ki bu benim için bir sorun.

Denemelerde şöyle bir duruma rastladım, benim program çalışırken tek başına çalışırsa istediğim zamanlamayı tutturamıyorum(100hz->30-60hz arasında kalıyor). Bu anda işlemci kullanımı %5i pek geçmiyor. Bunun üzerine acaba işlemci sleep moda veya iddle taskta mı kalıyor diye düşündüm ve yanda youtube videoları açtım ve bu durumda şaşırtıcı biçimde thread'lerin zamanlaması neredeyse gerçek zamanlı seviyesinde doğru olmaya başladı.

Bende bu yüzden boş dönen işlemci kullanan thread'ler yaptım fakat bu etkili olmadı, açtığım her bir thread bir çekirdeği kullanmaktan başka bir işe yaramadı. Bende acaba windows kendince gerçek zamanlı bir iş mesela video oynatma yapınca başka bir moda mı giriyor diye düşünmeye başladım.

Aranızda böyle bir durumla karşılaşan veya nedenini bilen var mı?

ahmet_zxc

sorunun cevabını bilmiyorum ama bizim başımıza gelen şuydu.

100ms de bir işlem yapmasını istiyoduk.
1. işlemi yap
100ms sonra 2. işlemi yap
100ms sonra 3. işlemi yap
100ms sonra 4. işlemi yap

bilgisayara başka işler verip, biraz meşgul ettiğimizde bizim işleri pasgeçiyodu.

bu bizde sorun olmamıştı ama kendi işini bitirip bizimkine sırayı getirdiği zaman bizim 100ms beklemeleri hiç sallamadan kaç tane işi yapmadıysa hepsini peşpeşe döşüyodu..

mantığı komple değiştirmek zorunda kaldık.

muhittin_kaplan

oluşturduğunuz Thread ın  Priority sini değiştirdiniz mi hiç, deneme yaptınız mı ?

magnetron

@gerbay hocam visual basic te de kullanılabiliyor mu bu multimedia timer lar ?

bir de arkadaşlar kızmasın konuyla alakası yok ama sizi bulmuşken sorayım

visual basic te function pointer var mıdır ?

teşekkür

berat23

multimedia timer ile mümkün fakat bana garip gelen normal thread.sleep ile de bazı koşullarda zamanlamanın doğru olması.

robomaster

Alıntı yapılan: muhittin_kaplan - 17 Haziran 2016, 10:44:44
oluşturduğunuz Thread ın  Priority sini değiştirdiniz mi hiç, deneme yaptınız mı ?

İpucu verilmiş işte buradan yürüyün. Priority (öncelik) hangisindeyse diğer thread onu beklemek zorundadır.

muhittin_kaplan

Alıntı yapılan: magnetron - 17 Haziran 2016, 11:04:40
@gerbay hocam visual basic te de kullanılabiliyor mu bu multimedia timer lar ?

bir de arkadaşlar kızmasın konuyla alakası yok ama sizi bulmuşken sorayım

visual basic te function pointer var mıdır ?

teşekkür
@magnetron hocam function pointer (dolaylı olarak fonksiyona erişecek yada fonksiyonun birini başka bir fonksiyona parametre geçecekseniz) için "delegate" i araştırın.