Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

tam zaman

Başlatan muhittin_kaplan, 26 Temmuz 2012, 02:14:36

muhittin_kaplan

vb.net te yada c# yazdığım blogun zamanını nasıl garanti edebilirim.
örneğin timer nesnesini kullandığımda ve 100ms intervalde kesin 100ms de mi işlem yapar?

barisertekin

#1
Kendiniz Test Etmek İsterseniz;

Kesin çalışma süreleri ölçümü diye bir şey buldum. İsterseniz bir inceleyin.

http://www.codeproject.com/Articles/61964/Performance-Tests-Precise-Run-Time-Measurements-wi

En önemli şey CPU çekirdeği veya işlemciler arasında geçişi önlemektir.(ProcessorAffinity)

1.Process.GetCurrentProcess () ProcessorAffinity = new IntPtr (2) //Sadece ikinci çekirdeği kullanın gibi bir ayar yapıp test edebiliriz.
2.Kullandığımız thread'ın Priority'sini High yapmalıyız.
_________________________________________

Bazı uygulamalarda tam zamanı ölçüm yöntemleri çok önemlidir. Sık kullanılan Windows API yöntemi GetTickCount() sistemin yeniden başlatılmasından itibaren geçen milisaniye sayısını alır, ama GetTickCount() çok kesin olan 1ms ve diğer tarafta sadece arşiv çözünürlüklerde çalışır.

Yani, kesin zaman ölçümü için başka bir yöntem bulmak gerekir.

Yüksek çözünürlük zamanlama için :  QueryPerformanceCounter() ve QueryPerformanceFrequency() API yöntemleri.

http://www.codeproject.com/Articles/2635/High-Performance-Timer-in-C

controller

Multimedia timer kullanın.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

Salih

#3
Alıntı yapılan: muhittin_kaplan - 26 Temmuz 2012, 02:14:36
vb.net te yada c# yazdığım blogun zamanını nasıl garanti edebilirim.
örneğin timer nesnesini kullandığımda ve 100ms intervalde kesin 100ms de mi işlem yapar?

Bende senelerdir aynı problemi yaşadım.
Windows programlarında normalde istediğim süreyi
garanti edemiyoruz.
Nedeni ise windows'un programların işleme sürelerini ve dış birimlerle haberleşme işlemlerini
tamamen kendi mantığına göre veya işine geldiği gibi yapıyor olması.
Ben programları Delphi ile yazıyorum. Bunun çözümünü şöyle buldum.  Programda normal Timer bileşeni kullanırsak
süre garantisi elde edemedim.
Threadtimer  isimli bileşenle bu problemi çözdüm. Bileşenin adından da anlaşılacağı gibi Thread tabanlı bir timer.
sende böyle bir bileşen kullanabilirsin.
Bileşenin bulunduğu paket ismi IOCOMP

Erol YILMAZ

IOCOMP ne demiş?

The Thread Timers differ from the Timer component in that they do not use low priority Windows Timer message,
but use threads whose priority can be configured.  This allows you to ensure that timer events fire consistently.

Salih

#5
Alıntı yapılan: Allegro - 26 Temmuz 2012, 16:47:16
IOCOMP ne demiş?

The Thread Timers differ from the Timer component in that they do not use low priority Windows Timer message,
but use threads whose priority can be configured.  This allows you to ensure that timer events fire consistently.

Normal Timer bileşeninde priority ayarı bile yok. Tamamen windows un vicdanına kalmış.
IOCOMP timer'da priority ayarlanarak normal timer'dan daha iyi netice alınabiliyor.
Örneğin belirli ms aralıklarla IO kartdan data alıp eğri çizdirdiğim de, normal timer'la
sürekli aynı aralıkları elde edemiyordum.
Ama IOCOMP ile elde edebiliyorum.
Zaten açıklamada normal timer bileşeninin de low priority olarak ayarlandığı belirtiliyor.
consistently kelimesi tutarlı anlamını da içeriyor bu arada

muuzoo

Konu hakkında bilgim olmadığı için bilen arkadaşlara danışmak istedim. Bildiğim kadarıyla işlem süresini deterministik olarak bilebildiğimiz, yönetebildiğimiz sistemler gerçek zamanlı olarak adlandırılıyor çünkü belirttiğiniz işlemin, belirttiğiniz sürede gerçekleşeceğini garanti ediyor. Windows bir gerçek zamanlı sistem olmadığına göre %100 bu işlemi şu kadar sürede yaparım diye garanti veremez diye tahmin ediyorum. Bu yüzden windows altında %100 garantili olarak işlem süresi tanımlaması yapılamaz diyebilir miyiz?
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

esensoy

interval zero nun rtx diye bir ürünü var,
belli şartlar altında zamanlamayı garanti ediyorlar
En tehlikeli an "zafer" anıdır.