Różnice
Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:hexor:hexor_prolog_mt [2007/11/19 18:23] 127.0.0.1 (old revision restored) |
pl:hexor:hexor_prolog_mt [2007/11/28 16:36] root Document moved from pl:hexor_prolog_mt |
====== Programy wielowątkowe w Prologu ====== | |
| |
FIXME gdzie to trzeba zapisac? w jakim pliku? | |
| |
Uruchomienie dodatkowego wątku w prologu polega na wywołaniu pl_call z osobnego wątku stworzonego w języku 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); | |
} | |
| |
| |
| |
| |
| |
| |
| |