Autor Wątek: 2 lub wiecej watków wykonujacych prawie to samo: SDL  (Przeczytany 5901 razy)

Offline micran

  • Użytkownik
    • Micran - Warsztat

# Sierpień 08, 2008, 19:15:13
Dobra dobra. Teraz mam tak :
Watki:
Główny - czyli gra
Poboczny - Cały czas leci petla while(1) i liczy nowe pozycje. W tej petli jest oczekiwanie co kazde "koło" petli.

Glowny jest ograniczony do 60fps.
Poboczny takze jest ograniczony do tylu.

W pobocznym liczy nowe pozycje dla kazdego pocisku. Moze pocisk to złe słowo dla quada poruszajacego sie powoli.

@skovron: po pierwszym akapicie mozna by sie zorientować że nie czytałeś moich postów. Ale sie pomyliłem. Ale nigdy na planszy nie mozliwe by było nawet te 2000.

Offline Mr. Spam

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

Offline Wiadomo

  • Użytkownik

# Sierpień 08, 2008, 19:18:38
Hmm.... Dlaczego "while(1)" ? A potem jak sie pozbedziesz watku? TerminateThread?

Offline vashpan

  • Użytkownik
    • Strona

# Sierpień 08, 2008, 19:51:10
Po co ci w ogole watki ? Dlaczego nie mozesz liczyc tych pociskow w glownym watku ?

Offline Kosai_

  • Użytkownik
    • devlog

# Sierpień 08, 2008, 19:53:37
micran, NAPRAWDę nie potrzebujesz wątków do tych kilku pocisków na mapie (tanks).

Offline micran

  • Użytkownik
    • Micran - Warsztat

# Sierpień 08, 2008, 19:58:54
@Wiadomo: Przecież jest  KillThread . używam go przed wylaczeniem aplikacji.
@vashpan: To sprobuj przed kazdym renderem zrobić petle for(int i=1;i<2000;i++) a w niej po 10 if ' ów (5 zagniezdzonych w sobie dla lepszego efektu). Wole to wykonywać w nowym watku. A dodaj sobie później AI i sieć to w taki sposób to miałbym na swoim słabym sprzecie coś koło ~29fps .  
@Kosai_ : Wole użyć watków. Wogóle to tanki traktuje jako zabawe i wiekszosc wszystkiego bedzie dla mnie nowościa. Nowościa dla mnie juz było OpenGL.

Offline SiwyEd

  • Użytkownik

# Sierpień 08, 2008, 20:03:26
@vashpan: To sprobuj przed kazdym renderem zrobić petle for(int i=1;i<2000;i++) a w niej po 10 if ' ów (5 zagniezdzonych w sobie dla lepszego efektu). Wole to wykonywać w nowym watku. A dodaj sobie później AI i sieć to w taki sposób to miałbym na swoim słabym sprzecie coś koło ~29fps .  

Jak myślisz, jeśli podzielisz tę pętlę na wątki, to procesor będzie miał mniej roboty?

Offline Kosai_

  • Użytkownik
    • devlog

# Sierpień 08, 2008, 20:04:49
Cytuj
@vashpan: To sprobuj przed kazdym renderem zrobić petle for(int i=1;i<2000;i++) a w niej po 10 if ' ów (5 zagniezdzonych w sobie dla lepszego efektu). Wole to wykonywać w nowym watku. A dodaj sobie później AI i sieć to w taki sposób to miałbym na swoim słabym sprzecie coś koło ~29fps .  
2000 pocisków? przecież w tankach to pocisków nie było więcej niż 20 na raz...
pewnie masz jakąś stałą tablicę... użyj vectora, będzie szybszy, niż pocisk[2000] :P

Offline Charibo

  • Redaktor

# Sierpień 08, 2008, 20:05:56
Cytuj
@vashpan: To sprobuj przed kazdym renderem zrobić petle for(int i=1;i<2000;i++) a w niej po 10 if ' ów (5 zagniezdzonych w sobie dla lepszego efektu). Wole to wykonywać w nowym watku. A dodaj sobie później AI i sieć to w taki sposób to miałbym na swoim słabym sprzecie coś koło ~29fps .  
:D Chłopie, ty w ogóle sprawdziłeś jak to wygląda? Też kiedyś tak myślałem - ale spróbuj sobie napisać testowy program i zobacz ile milionów (!) takich operacji będziesz w stanie zrobić w sensownym czasie. :) Dwadzieścia tysięcy ifów nie zrobi ci aż tak dużej różnicy.

Cytuj
użyj vectora, będzie szybszy, niż pocisk[2000]
Afaik nie w tym przypadku :) Wektor ma ten bonus nad tablicą, że jest dynamiczny (czyli możesz wrzucać do niego dowolną ilość elementów, a on się sam poszerzy). Natomiast odwołanie się do tablicy (i to forem który się po niej iteruje) będzie równie szybkie, jeśli nie szybsze, co  odwołanie się do wektora. :)
« Ostatnia zmiana: Sierpień 08, 2008, 20:20:26 wysłana przez Charibo »

Offline micran

  • Użytkownik
    • Micran - Warsztat

# Sierpień 08, 2008, 20:11:02
Narazie nie mam jak tego sprawdzic poniewaz u mnie na karcie chyba nie da sie wylaczyc vSync.Dlugo szukałem i nie znalazlem.

Offline Charibo

  • Redaktor

# Sierpień 08, 2008, 20:18:46
Cytuj
Narazie nie mam jak tego sprawdzic poniewaz u mnie na karcie chyba nie da sie wylaczyc vSync.Dlugo szukałem i nie znalazlem.
Co ma piernik do wiatraka? :) VSync odpowiada za ograniczenie ilości klatek na sekunde, nie za procesor :)

e:
// poboczne pytanie: ile klatek kolejkuje sobie aplikacja w przód? Czy jest to zależne od vsync?

Offline micran

  • Użytkownik
    • Micran - Warsztat

# Sierpień 08, 2008, 20:37:07
@Charibo: Jestem nowy w tworzeniu gier wiec wiele żeczy powinno mi sie wybaczyć  ;) :D Aha czyli mam sprawdzić procesor  tak ?? Wykonam testy jutro może  i wrzuce wyniki.
Co do Edit: he ??? Nie mam pojecia ??? Raczej sie tego nie dowiem dla tak słabej karty 7 lat temu kupiona i do użytku biurowego.

Offline Wiadomo

  • Użytkownik

# Sierpień 08, 2008, 21:57:18
KillThread to takie brzydkie rozwiazanie. A jaki masz procesor?

Offline skovron

  • Użytkownik
    • Healthbar Games

# Sierpień 09, 2008, 09:56:26
micran  przecież wszyscy ci tutaj piszą, że twoje rozwiązanie jest przekombinowane, nie daje ci żadnych korzyści a tylko może wszystko pogorszyć. Spora część z tych osób mówi to z własnego doświadczenia, nie jedno już napisali a ty no nie wiem, myślisz, ze swoim pomysłem zrewolucjonizujesz programowanie gier?

@vashpan: To sprobuj przed kazdym renderem zrobić petle for(int i=1;i<2000;i++) a w niej po 10 if ' ów (5 zagniezdzonych w sobie dla lepszego efektu). Wole to wykonywać w nowym watku. A dodaj sobie później AI i sieć to w taki sposób to miałbym na swoim słabym sprzecie coś koło ~29fps .
A widziałeś w ogóle ile bardziej skomplikowanych operacji i wielokrotnych pętli musi wykonać przeciętny silnik w trakcie renderowania jednej klatki? Zależy co będziesz robił w tej pętli ale jak tam będą (zwłaszcza) zagnieżdżone ify to nawet pętli for(int i=1;i<20000;i++) nie zauważysz.

Weź najpierw napisz tak jak mówili przedmówcy, na jednym wątku jedna pętla przeliczająca pozycję wszystkich pocisków a dopiero jak będziesz miał problemy z wydajnością - poszukaj innego rozwiązania (ale raczej nie na wielu wątkach).

Offline micran

  • Użytkownik
    • Micran - Warsztat

# Sierpień 09, 2008, 12:14:10
Jak co niektórzy nie wiedza co sie tu toczy od dawna pisze ze w jednym dodatkowym watku bedzie liczenie pocisków. Nie mówie tu o żadnym rewolucjonowaniu rynku gier czy programowaniu gier. Poprostu jak kazdy próbuje swoich rozwiazań jak mi nie beda pasować poszukam innego. Przecież najlepiej uczyć sie na bledach.

Procesor mam 1,3GHz. Normalny(czyli 1 rdzen).

Offline Mormegil

  • Użytkownik
    • Moj dev blog

# Sierpień 09, 2008, 13:25:53
Jak co niektórzy nie wiedza co sie tu toczy od dawna pisze ze w jednym dodatkowym watku bedzie liczenie pocisków. Nie mówie tu o żadnym rewolucjonowaniu rynku gier czy programowaniu gier. Poprostu jak kazdy próbuje swoich rozwiazań jak mi nie beda pasować poszukam innego. Przecież najlepiej uczyć sie na bledach.
Taki syndrom nauczyciela :) Kazdy chce Ci dobrze doradzic.