Both sides previous revision
Poprzednia wersja
|
|
pl:hexor:hexor_prolog_mt [2007/11/28 16:36] root Document moved from pl:hexor_prolog_mt |
pl:hexor:hexor_prolog_mt [2019/06/27 15:50] (aktualna) |
| ====== Programy wielowątkowe w Prologu ====== |
| |
| Uruchomienie dodatkowego wątku w prologu polega na wywołaniu pl_call z osobnego wątku stworzonego w języku C. |
| Korzystając z {{:pl:hexor:hexor_prolog.tar.gz|przykładu}} wszystkie modyfikacje wykonuje się w pliku __hexorPL.c__ |
| |
| ===== Instrukcja ===== |
| |
| W celu dodania wątku do programu należy: |
| - dopisać funkcję wątku np. |
| |
| void * thread (void *unused) |
| { |
| // tu kod wątku |
| } |
| |
| - dodać zmienną wątku ''pthread_t t;'' |
| - uruchomić wątek ''pthread_create (&t, NULL, thread, NULL);'' |
| * pierwszy argument to adres struktury ''pthread_t'' |
| * trzeci to funkcja wątku |
| * pozostałe ''NULL'' |
| * szczegóły min. na [[http://en.wikipedia.org/wiki/POSIX_Threads]] |
| - poczekać na zakończenie wątku ''pthread_join (t, NULL);'' |
| * pierwszy argument to struktura ''pthread_t'' |
| * drugi ''NULL'' |
| - jeśli wątek ma uruchamiać kod w prologu jego funkcja powinna zawierać następujące elementy: |
| * wywołanie ''pl_attach_engine ()'' - podpięcie się do interpretera prologu |
| * wywołanie ''pl_call ("runme", NULL)'' - wywołanie predykatu ''runme'' |
| * wywołanie ''pl_detach_engine ()'' - odłączenie od interpretera |
| |
| void *thread1 (void *unused) |
| { |
| pl_attach_engine (); |
| pl_call ("runme", NULL); |
| pl_detach_engine (); |
| return (NULL); |
| } |
| |
| |
| |
| |
| |
| |
| |