Autor Wątek: wątki  (Przeczytany 1321 razy)

Offline ryuu

  • Użytkownik

# Wrzesień 11, 2017, 12:40:30
Hej postanowiłem sobie odświeżyć moją wiedzę w c++. Napisałem postawę servera działa. I teraz nadszedł porobic wątki dla clientów i pokojów. Jest jakaś fajna wysoko poziomowa biblioteka ta wątkowości co działa podobnie jak w c# lub javie "?
 

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline kubera

  • Użytkownik
    • Prywatna strona

# Wrzesień 11, 2017, 16:44:40
Czołgiem.

Są różne opcje i w STLu i w Bibliotece Standardowej.
Fajnie opisane tu:
http://www.cplusplus.com/reference/future/async/
Możesz wykonywać pewne rzeczy praktycznie asynchronicznie.
Możesz zbudować pulę wątków.

Z gotowych frameworków kojarzę TBB Intela, ale nie polecam, bo się potrafią spóźniać z featurami nowych C++.
Poza tym wiele jest do uzyskania ze standardu.

Offline ryuu

  • Użytkownik

# Wrzesień 11, 2017, 20:44:08
właśnie chodzilo bym miał juz pule wątków zaimplementowana jak jest w c# i javie nigdy tego nie robiłem wiec nie bedzie to optymalne ;/

Offline kubera

  • Użytkownik
    • Prywatna strona

# Wrzesień 14, 2017, 21:58:59
Czy nadal szukasz rozwiązania? Ja mogę Ci udostępnić kod puli wątków.
Ma jedną wadę, jest trochę windowsowa, ale łatwiej zmodyfikować sprawdzony kod :) ...

Offline ryuu

  • Użytkownik

# Wrzesień 16, 2017, 01:08:42
szukam nadal rozwiaznia plus mecze sie z instalcja bosta bo ponoc ma juz pulle w\atka zrobiona

Offline kubera

  • Użytkownik
    • Prywatna strona

# Wrzesień 16, 2017, 01:58:50
Czołem!

Podrzucam swój kod. Nie jest odkrywczy, ale działa.
Jest klasa dla pojedynczego wątku.
Pula wątków jest oparta na wektorze wątków.
Działanie, to producent==>konsument.
Zadania się wrzuca jako wskaźniki do obiektów.
Obiekty są niszczone, bądź nie, zależnie od ich implementacji.

Funkcjonalność się nie skompiluje, trzeba go lekko poprawić.
Rzecz w tym, że to fragment mojego silnika.
Problemem mogą być includy oraz MONAD_CATCH. Monad catch to obsługa wyjątków w formie makra.
Tu możesz dodać własną obsługę wyjątków.
Jak spojrzysz na enkapsulację std::thread, to zauważysz funkcję stub.
On nic wielkiego nie przetwarza, tylko wychwytuje wyjątki sprzętowe. Takie cuda chyba są tylko w VC++.
if(!Monad::Exception::InAny()) sprawdza, czy wystąpił gdzieś wyjątek, jeśli tak, to przestaje obsługiwać zadania, próbuję jedynie wykonać destrukcję.
Jeśli co, to proszę pytaj.

Pozdr.