Bu sayfadaki yazılar
Sayfanın metni
Sayfa 80
Timer() ;
~Timer() ;
Timer(Timer const &timer) ;
Timer &operator =(Timer const &timer) ;
void Start() ;
void Stop() ;
double GetTime() const ;
private:
class Implementation ;
Implementation *pimpl_ ;
Timer.cpp’yi hazırlarken private datalara bu pointer üzerinden ulaşmamız gerekecek. Timer.cpp içinde önce bu yeni sınıfı tanımlamamız gerekiyor.
#include <windows.h>
#include "Timer.h"
class Timer::Implementation { friend class Timer ;
private:
bool counting_ ;
LARGE_INTEGER frequency_ ;
LARGE_INTEGER zero_ ;
Tüm datayı private yapıp sadece Timer sınıfına erişim vermek bu sınıfın normal kullanım için olmadığını, sadece Timer’ın arka plandaki işlerini yürütmek için gerektiğini rahatça anlatıyor (ufak bir comment satırının yerini tutamaz tabii).
Bu yönteme opak pointer dedik, çünkü kullanıcı bu pointerın arkasında neler döndüğünü göremiyor, haliyle de bilemiyor. (Zaten bilmemeli?!)
Timer constructor'ımızda bu implementasyon objemizi oluşturup destructor'da yok etmemiz gerekiyor.
Timer::Timer()
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 81
pimpl_(new Implementation)
// Başlangıçta durmuş halde.
pimpl_->counting_ = false ;
// İşlemci saati frekansını al.
pimpl_->QueryPerformanceFrequency(&pimpl_->frequency_) ;
// Baslangic degeri sifir.
pimpl_->zero_.QuadPart = 0ll ;
Timer::~Timer()
delete pimpl ;
Kopyalama işlerimiz de gerekli ama gayet kolaylar.
Timer::Timer(Timer const &timer)
pimpl_(new Implementation(*timer.pimpl_))
Timer &Timer::operator =(Timer const &timer)
*pimpl_ = *timer.pimpl_ ;
return *this ;
Kronometre işleri…
void Timer::Start()
if(!pimpl_->counting_)
// Başlama saatini al.
QueryPerformanceCounter(&pimpl_->zero_) ;
pimpl_->counting_ = true ;