Autor Wątek: [Allegro i WinSock] Watki  (Przeczytany 4313 razy)

Offline MatiSSJ

  • Użytkownik

# Wrzesień 14, 2009, 21:30:49
Elo. Tworze gierke sieciowa i mam problem do grafiki wybralem Allegro, zas info przesylam przez WinSocka. Chcialem skorzystac z watkow, ale mam problem. Gdy takowy watek w kliencie wrzuce do maina przed while(!keys[KEY_ESC]), to watek ten dziala tylko raz, czyli mozemy wyslac 1 pakiet klientem. Zas jak wrzucilem do whila, wszystko sie posypalo, wolno dzialalo i musialem resetnac kompa. Moze jest jakies inne rozwiazanie tej sytuacji? Prosze o pomoc.

Z gory THX.

Offline Mr. Spam

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

Offline Adde

  • Użytkownik

# Wrzesień 14, 2009, 22:19:40
Wątek twórz przed pętlą, ale za to w jego funkcji daj pętle ;P.

Kod: (cpp) [Zaznacz]
void Thread(bla)
{
while(1)
{
bla
bla
}
}

PS. W kliencie wątki są niepotrzebne, wystarczy dać select()

Offline MatiSSJ

  • Użytkownik

# Wrzesień 14, 2009, 23:16:48
Mam whila w watku, i nic to nie daje.

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Wrzesień 14, 2009, 23:18:52
Cytuj
PS. W kliencie wątki są niepotrzebne, wystarczy dać select()
Popieram. Nie są potrzebne nawet w serwerze (chyba że robisz MMO).

Offline Adde

  • Użytkownik

# Wrzesień 15, 2009, 16:52:29
Mam whila w watku, i nic to nie daje.

A nie  przerywasz tej pętli w jakiś sposób? Nie dajesz jakiejś funkcji które zatrzymują działanie wątku?

Cytuj
PS. W kliencie wątki są niepotrzebne, wystarczy dać select()
Popieram. Nie są potrzebne nawet w serwerze (chyba że robisz MMO).

Jeśli się robi coś bardziej skomplikowanego niż chat wątki są przydatne ;). Select() czasem nie wyłapuje wiadomości a wydajność leci na łeb na szyję ;)

Offline Esidar

  • Użytkownik

# Wrzesień 15, 2009, 17:05:29
Cytuj
PS. W kliencie wątki są niepotrzebne, wystarczy dać select()
Popieram. Nie są potrzebne nawet w serwerze (chyba że robisz MMO).
Jeśli robisz coś bardziej skomplikowanego niż chat to klient też powinien mieć wątek dedykowany do select.

Jak przyjdzie za dużo pakietów których nie pobierzesz (bo FPS spadnie)  to zaczniesz je gubić. Z wysyłaniem też jest problem bo wysyłanie może zwrócić fail jeśli poprzednie pakiety jeszcze nie wyszły, wtedy trzeba zrobić sleep i próbować wysłać ponownie. Bez sensu jest wtedy wstrzymywać resztę klienta tym sleepem.

Offline MatiSSJ

  • Użytkownik

# Wrzesień 15, 2009, 18:15:51
No wlasnie to jest MMORPG, wiec potrzebuje watkow. Sprobuje jeszcze kilka rzeczy, nad ktorymi myslalem w szkole.

Offline MatiSSJ

  • Użytkownik

# Wrzesień 15, 2009, 18:52:22
Dobra, dziala, tylko ktos mi powie, czemu akurat tak sie dzieje? Przekopiowalem kawalek z wsysylaniem do while(!key[KEY_ESC]), a odbieranie pozostawilem watkowi. Co bylo zle?

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Wrzesień 15, 2009, 18:53:55
Cytuj
No wlasnie to jest MMORPG, wiec potrzebuje watkow.
Potrzebujesz raczej bardziej realistycznego podejścia do wyboru zadań, których się podejmujesz. ;)

Offline MatiSSJ

  • Użytkownik

# Wrzesień 15, 2009, 19:03:17
Moglem juz na tym etapie sie poddac, ale ja tam dopne swego :).

Offline ConayR

  • Użytkownik

# Wrzesień 15, 2009, 19:07:55
To będziesz pierwszy, może drugi, który dobrnął do końca takiego projektu. Powodzenia! :)

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Wrzesień 15, 2009, 19:16:25
Moglem juz na tym etapie sie poddac, ale ja tam dopne swego :).
Popieram samozaparcie, ale nie tędy droga. Powiedzmy, że kursu prawa jazdy nie robi się startując w Formule 1.


Żeby zrobić złożoną aplikację, trzeba od poczatku mieć jej w miarę kompletny obraz i projekt, a do tego trzeba doświadczenia. Bez tego pisanie kodu sprowadza się do chaotycznego doklejania kolejnych kawałków funkcjonalności i dośc szybko w kodzie robi sie taki chaos, że nie pozostaje nic innego, jak zacząć projektu od nowa. Projektowanie aplikacji to umiejętność, którą się wyrabia z czasem i doświadczeniem, więc na poczatku lepiej wybierac projekty, które ma szansę się skończyć zanim powstanie nieznośny bałagan w kodzie (wiem z własnego doświadczenia, bo dziesiątki moich projektów za młodu tak skończyły). :)

Offline MatiSSJ

  • Użytkownik

# Wrzesień 15, 2009, 19:20:05
Teraz jak juz wiem jak wszystko wysylac i odbierac w Allegro nie bedzie problemu, jesli chcesz moge Ci pozniej wyslac caly kodzik i zapewniam, ze nie bedzie :). Grafika bedzie mocno obiektowa, podzial na pliki, a jesli chodzi o WinSocka, to jesli nie napotkam jeszcze jakiegos bledu to bedzie wszystko git :), logi gry, konta, hasla i opis postaci w plikach(to juz zrobione) :).

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Wrzesień 15, 2009, 19:27:45
Cytuj
Teraz jak juz wiem jak wszystko wysylac i odbierac w Allegro nie bedzie problemu, jesli chcesz moge Ci pozniej wyslac caly kodzik i zapewniam, ze nie bedzie :).
Mowa o programowaniu. Z czystym sumieniem mogę Cię zapewnic, że _będzie_ problem. I to nie jeden. Zawsze są. :)

Offline MatiSSJ

  • Użytkownik

# Wrzesień 15, 2009, 19:31:09
Ja zawsze jak mam jakis problem z programem, ktory robie, to nic innego mnie nie interesuje, nizeli ten problem, czy to szkola, czy zasypiam, czy jem obiad, caly czas nad tym mysle i wkoncu... cos wymyslam :). Wiadomo, ze bez problemow sie nie obejdzie, bo tak jak juz powiedziales, to jest programowanie.