Nedávno se na tomto serveru objevila FLL knihovna CPPTimer. K čemu slouží ? Jaká má omezení ? Vyplatí se ji vůbec používat ?
Nebudu zde probírat jak inicializovat timery a jak je nastavovat, toto je popsáno v souboru Readme.txt u fll knihovny.
Co umí:
Tato knihovna umožňuje "vytvořit" až 50 timerů, které nastanou "vždy". To znamená, že knihovna interně registruje Windows-ký timer a zajišťuje , že všechny timery, které si inicilizujeme, spustí námi udané procedury i když VFP dělá něco jiného. Nesmí se to však brát doslovně, neboť VFP je dosti citlivá na vnucování paralelního provádění kódu.
Tyto timery mají i omezení (některá i oprávněně ):
Jak to dělá:
Každý kdo zvládá C a podívá se na zdrojový kód, pronese "Jak jednoduché".
Interně se používají tři matice, každá z nich má 50 buněk.
Při inicializaci se do globální proměnné maxnumberoftimers uloží maximální počet timerů pro použití. Pokud již k inicializaci došlo, veškeré předchozí údaje se "smažou". Ve Windows si knihovna zaregistruje Timer s udaným intervalem. Při vyvolání zpětně-volané procedury TimerFunc() je procházena matice lastevent[] a porovnává se rozdíl mezi posledním uloženým časem s intervalem a novým časem. Pro zjišťování času se používá API funkce timeGetTime().
Pokud dojde ke kýženému rozdílu, spustí se příkaz uložený v matici parancs[].
Její použití:
Je zde značně široké pole působnosti. Od zjišťování různých stavů na pozadí běžící aplikace ( procházení tabulky pomocí SCAN ... ENDSCAN ) až po různé grafické blbinky.
Na konec bych jen dodal, že dodaný zdrojový kód poněkud neodpovídá souboru Readme.txt .
Ve zdrojovém kódu chybí funkce GetFreeTimerIndex() a ve funkcích SetupTimer() a StopTimer() jsou drobné chybičky. Místo TimerID < maxnumberoftimers má být TimerID<=maxnumberoftimers.