Wykorzystanie funkcji z bibliotek języka C w programach RPG.
Wielu deweloperów do realizacji funkcji opóźnienia (zatrzymania programu na pewien okreÅ›lony czas) wykorzystuje pÄ™tlÄ™ DO. Ta technika niepotrzebnie „zżera” zasoby procesora, tylko po to by wstrzymać wykonanie zadania przez okreÅ›lony czas.
Można skorzystać z komendy DLYJOB jÄ™zyka CL, ale jest to rozwiÄ…zanie nieeleganckie, wymagajÄ…ce utworzenie kolejnego obiektu a mamy przecież możliwość wykorzystania systemowych API w jÄ™zyku RPG pozwalajÄ…cych w zasadzie zrealizować każde zadanie bez użycia CL-a. Taki wÅ‚aÅ›nie sposób realizacji „opóźnienia” wydaje siÄ™ być najodpowiedniejszy w programie RPG.
Funkcja sleep() zawiesza wykonywanie zadania na określony czas, podany w sekundach. Sleep API to tak naprawdę funkcja języka C którą możemy wywołać z poziomu RPG. By użyć tej funkcji we własnym programie potrzebujemy dwóch rzeczy.
Zadeklarowania tzw. binding directory QC2LE za pomocą dyrektywy BNDDIR w sekcji nagłówkowej programu źródłowego RPG. Należy pamietać o użyciu wielkich liter i apostrofu.
Umieszczenia deklaracji prototypu funkcji sleep() z biblioteki języka C.
Istnieją dwie wersje funkcji sleep: sleep i usleep. Pierwsza wymaga podania czasu opóźnienia w sekundach, natomiast druga (usleep), podaną liczbę traktuje jako mikrosekundy. Drobna lecz ważna różnica difference.
H BNDDIR('QC2LE') D sleep          PR           10U 0 ExtProc('sleep') D  seconds                    10U 0 value D usleep         PR           10U 0 ExtProc('usleep') D  microSecs                   10U 0 value
Prosto i zwięźle. A użycie zadeklarowanej funkcji w programie jest jeszcze łatwiejsze.
D t1 s z D t2 s z /free *inlr = *on; t1 = %timestamp(); sleep (10); t2 = %timestamp(); dump(a);
Wykorzystanie funkcji sleep będzie na pewno łatwiejsze niż liczenie do miliona 😉