Aktualności i artykuły

Opublikowano: 28 czerwca 2013
Kategoria wpisu: poradnikiprogramowanie

Czas na drzemkę ?

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 ;)

^