11 Ocak 2016 Pazartesi

C++ Mutex

Mutex'in kullanımı için genelde aynı uygulamanın aynı bilgisayarda aynı anda birden çok açılmasının engellenmesi örneği verilmektedir. Biz burada birden çok uygulamanın aynı günlük (log) dosyasına satırlar eklemesinin senkronizasyonunu göreceğiz. Diyelim ki şöyle bir kodumuz var ve bunu Mutex kullanarak uygulamalarımız arasında da güvenli kılmak istiyoruz (yani log dosyasını aynı anda birden çok uygulama yazma hakkıyla açmak istediği için sorun yaşıyoruz ve bir şekilde bunları düzene sokmak istiyoruz) :
1public static void LogYaz(String s)
2{
3   File.AppendAllText("YPLog.log", s);
4}
Bu kodu şu şekilde güvenli hale getirebiliriz:
01private static Mutex mtx = new Mutex(false"YazilimProjesi_LogMutexi");
02 
03public static void LogYaz(String s)
04{
05   mtx.WaitOne();
06   try
07   {
08      File.AppendAllText("YPLog.log", s);
09   }
10   finally
11   {
12      mtx.ReleaseMutex();
13   }
14}
Lock deyiminde olduğu gibi, bir mutex sadece onu kilitleyen proses tarafından serbest bırakılabilir. Mutex'le ilgili ek bir bilgi daha verelim; ReleaseMutex metodu çağrılmadan uygulama sonlanacak olursa, CLR tarafından ilgili mutex otomatik olarak serbest bırakılır.
Share:

C++ Lock

Lock
01private static readonly object kilit = new object();
02private int sayac;
03 
04public void IslemYap()
05{
06   lock (kilit)
07   {
08      sayac++;
09      if (sayac == 10)
10         BaskaBirIslemYap();
11   }
12}
lock deyimi C# dilinin sunduğu pratik bir senkronizasyon mekanizmasıdır. IslemYap() metodunun birden çok thread tarafından işletilmekte olduğunu düşünelim. lock (kilit) aşamasına ilk gelen thread ilgili bloğun işletim hakkını kazanır. Bu blok bu thread tarafından tamamlanmadan başka bir thread aynı aşamaya geldiğinde ilk thread'in işini bitirmesini beklemek zorundadır. Bu thread'lerin sayısı ne kadar çok olursa olsun hepsi beklemek zorundadır. İlk thread bloğun işletimini bitirdiği anda bloğun işletim hakkı bekleyen thread'ler arasında ilk-gelen-ilk-hizmet-alır mantığıyla diğer bir thread'e geçer. Böylelikle bu örnekte sayac değişkeninin değerinin artması ve ardından değerinin test edilmesi işlemi bölünmeden gerçekleşmiş olur



Share:

C++ Proses ve Thread nedir?



Process:

Her Program Exesi Bir Processtir 
Process, bir bilgisayar programının çalıştırıldığındaki, yani RAM bellekte tutulup komutlarının (instruction) işlendiği halidir. Programın çalışan vaziyetine process diyebiliriz. Kendisine ait kod segmenti, yığın segmenti ve veri segmenti bulunur. Bir process en az bir threade sahiptir. 

Çok Prosesli İşlemler: 


         Birden fazla Programı (processi)Aynı Anda Çalıştırabiliyorsa ..Örnegin  Linux Windows Çok Prosesli Bir İşletim Sistemidir fakat Dos Sadece Bir Program Calsıtırırdı


Procesesler Linuxta FORK ile Windowsta ise CREATEPROCESS ile oluşturuulur




Thread:

Aynı Anda Farklı İşleri Yapmayı Saglar Mesela Bir oyunda Müzik Calarken Silah Sesi Vermek İçin Müzik Sesini Kaptmadan Silah Sesi  Gelmesi İçin Thread Kullanılır


  • Linuxta Threadlar pthread_create POSİX FONKSİYONU  ile  Windowsta ise CreateThread   APIsi oluşturulur



Share:

C++ Class Oluşturma

C++ İle Class Oluşturursa k Kullanacağımız Değişkenleri .h Dosyasında Tanımlarız ..Komutları ise .cpp Dosyasında Kullanırız ....Fakat Bu Sınıfı Kullanma İşlemini İse main.cpp De Gercekleştiririz.

Örneğin:   Bir Thread Sınıfı Oluşturursak


MyThread.h Dosyasına

class MyThread  : public QThread
{
public:
    MyThread();
    void run();
    QString name;
};



MyThread.cpp Dosyası



void MyThread::run()
{

     qDebug()<name<<"Running";
    for(int i=0;i<1000 b="" i="">
    {
        qDebug()<name<
    }
}


Main.cp Dosyası


#include




MyThread mThread1;
mThread1.name="mThread1";
mThread1.start();




////KOYU RENKLİ YERLER SONRADA EKLENMİŞTİR
Share:

c++ ve Qt de Status Bar

//STATUS BAR BİR FONSİYONA TIKLANDIGINDA SAG ALT KÖŞEDE İŞLEMLE BİLGİ
    //VERMEYE YARAR MESELA BAGLANA TIKLAYINCA ...SAG ALTTA SUNUCUYA BAGLANILIYOR BEKLEYİNİZ DEMESİ GİBİ   2000 ise

    //Ne kadar Süre Ekranda Duracagını Belirler 
Share: