- 19 Şub 2022
- 1,137
- 10
- 833
Covid olduktan sonra sıkılıp windows kullanmaya başladım tabi GNU-linux dan çıkıp windows kullanınca sudan çıkmış balığa döndüm.
ben saat ve dakika ile yaşayan birisiyim kitap okurken,çalışma yaparken sürekli saat veya dakika tutarım, linux da gnome-clock vardır fakat windows ta olmadığından nasıl dakika tutsam diye düşünmeye başladım sonunda kendi kronometremi neden yapmıyorum ki demedim ve bu proje ortaya çıktı.
ben saat ve dakika ile yaşayan birisiyim kitap okurken,çalışma yaparken sürekli saat veya dakika tutarım, linux da gnome-clock vardır fakat windows ta olmadığından nasıl dakika tutsam diye düşünmeye başladım sonunda kendi kronometremi neden yapmıyorum ki demedim ve bu proje ortaya çıktı.
bu proje diğer projelerden çok farklı!
evet bu proje çok farklı zira içerisinde garable collection,thread kullanıldı isterseniz bunlar nedir bahsedelim.
Thread nedir?
Aslında basitce açıklarsak process'in altındaki alt processler diyebiliriz bunu bir el gibi düşünün thread ise parmaklardır yani bir process altında bir çok işlemi yapabilirsiniz bu programda da bu kullanılmıştır eğer thread olmasa idi ne olurdu? forum donardı,butonlar çalışmazdı yani özetle sorun yaşardık.
Thread ile ilgili birkaç öenek verirsek misal bir ftp programını düşünün eğer thread kullanılmaz ise ilk giren kullanıcının işini bitirmesi beklenirdi veya rat yazdığınızı hayal edin socket dolu ise sadece 1 kullanıcıya hizmet verirsiniz.
Görsel örnek:
Thread ile ilgili birkaç öenek verirsek misal bir ftp programını düşünün eğer thread kullanılmaz ise ilk giren kullanıcının işini bitirmesi beklenirdi veya rat yazdığınızı hayal edin socket dolu ise sadece 1 kullanıcıya hizmet verirsiniz.
Görsel örnek:
Garable collection nedir?
bunuda basit bir şekilde anlatacak olursak ram bellek üzerinde kullanılmayan objeleri temizlemekle yükümlüdür yani ram belleğin şişmesini engeller.
Kaynak kodlar:
Sadece 2 buton,2 label ekleyin ve birde contectmenu kodlar aşağıdadır.
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace kronometrem
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
byte saniye = 0;
int dakika=0;
/*burada saniye'yi byte cinsinden almam saniye yi 1-60 arasında ihtiyacım olmasındandır, dakika konusu ise byte olamaz eğer kullanan kişi 255 sayısını dakika da geçerse overflow hatası alacaktır ve program -255 den başlar bu yüzden int en iyidir.*/
public void kronometre_baslat()
{
while(true) /*sonsuz döngüye al*/
{
Thread.Sleep(1000); /*1 saniye uyut*/
if (saniye == 60) /*saniye 60 olduysa*/
{
saniye = 0; /*sıfırla*/
dakika++; /*dakikayı bir attır*/
dakika_yaz(Convert.ToString(dakika));
GC.Collect(); /*çöpleri topla */
}
else
{
saniye++; /*saniye ye 1 ekle*/
}
}
}
private void dakika_yaz(string saat) /*dakika kısmı*/
{
if (this.InvokeRequired) /*foruma başka kaynaktan istek geliyor mu?*/
{
hafizaya_al yeni = new hafizaya_al(dakika_yaz); /*vcarsa gerekli işlemi yap */
this.Invoke(yeni, new object[] { saat });
}
else
{
this.label2.Text = Convert.ToString(saat); /*saati yaz*/
GC.Collect(); /*çöpleri topla */
}
}
delegate void hafizaya_al(string dakika);
Thread islem; /*iplik oluşturacağımız kısım*/
private void button1_Click(object sender, EventArgs e)
{
try
{
islem = new Thread(kronometre_baslat);
islem.Priority = ThreadPriority.Lowest; /*işlemciyi en az şekilde rahatsız etmesi için lowest seviyesinde başla*/;
islem.Start(); /*işlemi başlat*/
MessageBox.Show("Kronometre başlatılmıştır!", "Kronometrem", MessageBoxButtons.OK);
}
catch( Exception hata)
{
MessageBox.Show(hata.ToString());
}
}
private void button2_Click(object sender, EventArgs e)
{
islem.Abort(); /*işlemi sonlandır*/
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = false;
islem.Abort(); /*işlemi sonlandır*/
}
private void şuanSaniyeKaçToolStripMenuItem_Click_1(object sender, EventArgs e)
{
MessageBox.Show("şuan saniye: " + Convert.ToString(saniye));
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}