Merhabalar bugün sizlere Windows API'nin QueryPerformanceCounter ve QueryPerformanceFrequency işlevlerini kullanarak zaman ölçümü yapan bir uygulamanın timer sınıfı gerekmeden çalışma prensiplerini & sadece orta düzey İngilizce ile basit ama etkili promtlar yazarak 0 kodlama bilgisiyle istediğiniz dilde & şekilde kod yazan bir aracı göstereceğim. Aslında bu konu biraz üçü bir arada gibi oldu çünkü yukarıda bahsettiklerim harici bir de Timer nesnesi kullanmadığım için; geçmişte açmış olduğum konularda GUI ögelerinin konsol uygulamalarına alternatif şekilde entegrasyonunu anlatacağım. Üretilen bu kod parçaları bize her 1 dakika da konsola Merhaba Dünya! mesajını gösterecek.
Konuya geçmeden önce size Windsurf uygulamasını göstermek istiyorum. Bu uygulama sayesinde hiç kod yazmadan sadece dil ile oturduğunuz yerden kodlar üretip derleyebilirsiniz. Uygulama ücretli ama dolar kurundan dolayı maalesef bizde piyasası yüksek oluyor ve kaydolmanız gerekiyor. Merak etmeyin ücretsiz sürümü mevcut.
İndirdikten sonra belirli bir klasör oluşturup içerisinde istediğiniz şekilde kod yazdırabilirsiniz. Bunun gibi birkaç tane daha var ancak en stabil çalışanı & tercih edileni sosyal medya platformları üzerinde bu oldu o yüzden ben de bunu size sunayım dedim. Aşağıdaki kodları da onun yardımı ile geliştirdim.
Ekleyeceğimiz Kütüphaneler
using System;using System.Runtime.InteropServices;using System.ComponentModel;Bir class oluşturalım ve adını HighResolutionTimer yapalım.
C#:
// Windows API functions
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceFrequency(out long lpFrequency);
private long _startTime;
private long _stopTime;
private bool _isRunning;
private readonly long _frequency;
public HighResolutionTimer()
{
_startTime = 0;
_stopTime = 0;
_isRunning = false;
if (!QueryPerformanceFrequency(out _frequency))
{
throw new Win32Exception("High-resolution performance counter not supported");
}
}
public void Start()
{
if (!_isRunning)
{
QueryPerformanceCounter(out _startTime);
_isRunning = true;
}
}
public void Stop()
{
if (_isRunning)
{
QueryPerformanceCounter(out _stopTime);
_isRunning = false;
}
}
public void Reset()
{
_startTime = 0;
_stopTime = 0;
_isRunning = false;
}
public double ElapsedMilliseconds
{
get
{
if (_isRunning)
{
QueryPerformanceCounter(out long currentTime);
return (double)(currentTime - _startTime) * 1000 / _frequency;
}
return (double)(_stopTime - _startTime) * 1000 / _frequency;
}
}
public TimeSpan Elapsed
{
get => TimeSpan.FromMilliseconds(ElapsedMilliseconds);
}
public void Dispose()
{
Stop();
}
Ve hassas zamanlayıcımız hazır. Şimdi ister form oluşturun ister konsol uygulaması farketmez ama şahsen konsol uygulaması oluşturdum. Hemen ana kütüphanelerimi de gireyim;
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using HighResolutionTiming;Daha sonra kodun çalışıp çalışmadığını test etmek için aşağıdaki kodu giriyorum.
C#:
Console.WriteLine("Hassas zamanlayıcı aktif edildi!");
Console.WriteLine("Çıkmak için Ctrl+C tuşuna basın.");
using (var timer = new HighResolutionTimer()) // Class'ımızı konsol uygulamasına tanımalyıp fonksiyonlarını çağırıyoruz...
{
timer.Start(); //hassas zamanlayıcıyı başlat
while (true)
{
if (timer.ElapsedMilliseconds >= 60000) // 60000 ms = 1 dakika
{
Console.WriteLine("Merhaba Dünya!"); //mesajı yazdır
timer.Reset(); // resetle
timer.Start(); // tekrar 1 dakika saymaya başla
}
// Yüksek CPU kullanımını önlemek için bu kodu yazalım...
System.Threading.Thread.Sleep(100);
}
[ SONUÇ GÖRSELİ ]


