C# Multithread Tetikleyici
-
thread şart değil application.idle eventine bir fonksiyon ata. bu fonksiyonu sürekli çağırır .net framework.
sonra o fonksiyona if (dizi.length == oncekiboyut){return} mantığını yerleştirirsin. sonraki işlememe geçmez dolayısıyla.
Bu bilinen ve çok kullanılan bir yöntem özellikle c# ta yapılan oyunların render loop'larında. threadda kullanılan while(1){} 'dan daha pratik diyebilirim
-
Java'da "event handling" denen olay var, C# karşılığını bilmiyorum.
Java // http://www.google.com/#hl=en&source=hp&q=java+event+handling&aq=1&aqi=g10&aql=&oq=java+event+&gs_rfai=&fp=93c3c78db929eee0
C# // http://www.google.com/#hl=en&q=c%23+event+handling&aq=f&aqi=g3&aql=&oq=&gs_rfai=&fp=93c3c78db929eee0
-
Şimdi müridler olay tam olarak şu. Bu proje çok bir büyük bir proje ve her fonksiyon giriş-çıkışında log tutuluyor.Dolayısıyla bazı logları yazması uzun sürdüğünden o sırada başka istek geldiğinde çakıyor. Ben de şöyle düşündüm log yazma işlemi şöyle devam etsin; gelsin bir diziye yada collection sınıfından List'e kaydettsin işine devam etsin diğer taraf yani log yazma ile uğraşmasın. Ve dizide değişiklik olduğu anda bir thread ile arka planda log için diziden eleman alınıp oluşturulsun. Dizide değişilik olduğunu anlamayı sizlerin de fikirlerinden yola çıkarak aştım şöyleki;
....
AddArray(log*); // Ekleme işlemi için fonk. çağırıyoruz,böylece dizide değişiklik olduğunu anlıyoruz :)
....
private void AddArray(........) //Dizimize eleman eklemek için bu fonk. çağırıyoruz
{
List.Add(log*);
//List dizisine eleman eklenip akış devam edicek
//Aynı anda bir arkaplan thread i yaratarak Eklenen elemanı log a yazıcam
//Tabi bu log yazılırken başka log da gelebilir o yüzden burda 'semaphore' kullanıcam
}
Takıldığım yer diziye eleman eklemeyi fonksiyonda yapmayı akıl edemediğim kısımdı.Uzun oldu ama belki böyle birşey işine yarayan olur diye ayrıntılı açıklama gereği hissetim.Yardımlar için teşekkür ederim...
