Hej, jaki jest odpowiednik funkcji _beginthread na systemy Unixopodobne?
Próbowałem bawić się z pthread, ale nie do końca o to mi chodziło…
Hej, jaki jest odpowiednik funkcji _beginthread na systemy Unixopodobne?
Próbowałem bawić się z pthread, ale nie do końca o to mi chodziło…
Ale pthreads to właśnie podstawowa biblioteka do wątków w systemach Unix(-like). Do utworzenia wątku jest pthread_create. Owszem, możesz użyć jakieś innej biblioteki, ale i tak będzie to tylko nakładka na pthreads. Możesz się zainteresować np. wątkami w Glib.
Tak, ale po użyciu pthread_create i pthread_join, wątek niby się tworzy ale nie działa tak samo jak na Windowsie.
Tzn. Mam funkcje abc() wewnątrz której tworze wątek. Funkcje abc() wywołuje z funkcji main(), i niby wszystko co miało się wykonać w funkcji abc, wykonuje się ale za to nie wykonuje się to co w funkcji main jest za funkcją abc, dopóki wątek nie przestanie “pracować”…
Pokaż kod, który sprawia Ci problemy.
Przykład:
void *thread(void*)
{
while(true)
{
cout<<"Jestem watkiem!"<
//wazne rzeczy
}
}
void abc()
{
//dowolny kod
pthread_t t;
pthread_create(&t,NULL,thread,NULL);
pthread_join(t,NULL);
//dowolny kod
}
int main()
{
cout<<"Ble ble ble"<
abc();
cout<<"Test"<
return 0;
}
Tak jak podejrzewałem - join. Robi dokładnie to co ma robić: http://pubs.opengroup.org/onlinepubs/00 … _join.html
Wstrzymuje wykonanie głównego wątku (z funkcji main) dopóki nie zostanie zakończony wątek “t”. Czyli powrót z abc() następuje po zakończeniu wykonywania wątku t, a ten sam nigdy się nie zatrzyma… zgodnie z tym co otrzymujesz.
Kurr… cze…
Więc mam użyć jedynie funkcji pthread_create?
Zapewne chcesz użyć pthread_join, zapewne później (jeśli np. w którymś miejscu musisz mieć wyniki obliczeń z innych wątków). Tyle, że wywołując join zaraz po create nie dajesz możliwości wątkowi wywołującemu działać dopóki nie zakończy się ten wątek. To już zależy jakie operacje wykonują te wątki i ogólnie jak chcesz zorganizować ich pracę.
PS Jeśli interesują Cię nakładki na pthreads to pierwsze przychodzą mi na myśl Glib Threads ( http://developer.gnome.org/glib/2.28/glib-Threads.html ) i Boost.Thread ( http://www.boost.org/doc/libs/1_46_1/do … hread.html )
Nie rozumiesz, ja wcale nie potrzebuje używać join. Użyłem go ponieważ było we wszystkich tutorialach :lol:
Anyway, już sobie poradziłem. Dzięki Następnym razem przejże dokumentacje zanim założę wątek.