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 😉

^