Rezervační systém
|
třída pro zápis do žurnálu ...
#include <Journal.h>
Veřejné metody | |
CWriteJournal (const char *pszPath, unsigned uiLimit, CMemoryDb *cDb) | |
konstruktor ... | |
~CWriteJournal () | |
destruktor ... | |
void | AskBackup (void) |
požadavek na vyprázdnění žurnálu ... | |
bool | AddItem (unsigned uiType, unsigned uiLength, const void *pData) |
přidání položky do žurnálu ... | |
třída pro zápis do žurnálu
Třída zajišťuje práci se souborem žurnálu. Pro svou práci si vytvoří pomocné vlákno (jež je po naprostou většinu času uspáno). Slouží k přidávání jednotlivých položek do žurnálu, zároveň kontroluje, zda velikost souboru nepřesáhla přednastavený limit. Pokud ano, je probuzeno pracovní vlákno, které zajistí provedení zálohy databáze a vyprázdnění žurnálu. Podrobněji zde.
CWriteJournal::CWriteJournal | ( | const char * | pszPath, |
unsigned | uiLimit, | ||
CMemoryDb * | cDb | ||
) |
konstruktor
Vytvoření třídy obnáší i vytvoření pracovního vlákna pro provádění zálohy databáze (včetně synchronizačním objektů) a vytvoření (prázdného) souboru žurnálu v požadovaném umístění.
[in] | pszPath | určení složky pro uložení interní zálohy databáze a souboru žurnálu. Konkrétní jména jsou určena vnitřními konstantami. Volající je odpovědný za to, že proces má odpovídající přístupová práva do zadané složky. |
[in] | uiLimit | limit velikosti žurnálového souboru. Při jeho překročení je vyvolána interní záloha databáze. |
[in] | cDb | ukazatel na instanci databáze, se kterou je žurnál spojen. |
CWriteJournal::~CWriteJournal | ( | ) |
destruktor
Před zrušením třídy je legálně ukončeno pracovní vlákno a jsou uvolněny synchronizační objekty.
bool CWriteJournal::AddItem | ( | unsigned | uiType, |
unsigned | uiLength, | ||
const void * | pData | ||
) |
přidání položky do žurnálu
Do žurnálu je přidána další položka dle parametrů metody. V případě, že velikost žurnálu překročí přednastavenou mez, bude co nejdříve provedena kompletní záloha celé databáze a soubor žurnálu následně vymazán.
[in] | uiType | typ položky (pro účely identifikace položky se používá výčtový typ CCommand::EQueryCmd) |
[in] | uiLength | velikost dat (v bytech) |
[in] | pData | ukazatel na data, která jsou spojena s konkrétním příkazem (velikost a struktura dat se liší podle příkazu) |
void CWriteJournal::AskBackup | ( | void | ) |
požadavek na vyprázdnění žurnálu
Obsluha vnějšího požadavku na provedení interní zálohy celé databáze a tím i vyprázdnění souboru žurnálu. Požadavek je uložen a bude vyřízen pracovním vláknem co nejdříve (po získání výhradního přístupu k databázi).