Skocz do zawartości

Rekomendowane odpowiedzi

Spoko, pytam się tylko dlatego aby móc zrestartować wątek który się "zacioł" (jak się używa kilku wątkow naraz to czasem się zdarza :mellow: )

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Wyszedł GM8, można liczyć na update ?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Gdzieś miałem źródła GMThreads, ale raczej nie ważę się updatować za Snake skoro to jego projekt ;p

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Niedługo zaktualizuję.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ok, nie spieszy się, ale muszę podjąć decyzję czy przejść na GM8 czy zostać przy GM7 i musiałem zapytać, bo możliwe, że GMThreads mi się przyda.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

No dobra, jest aktualizacja! (v2.0):

 

Features:

- Wsparcie dla GM8

- Dodano funkcję thread_wait, służącą do oczekiwania na zakończenie wątku

- Dodano możliwość sprawdzenia błędu danego wątku

- DLL został napisany od nowa w MASMie

- Wydano kod źródłowy (na LGPL)

 

Compatibility issues:

- Zmiany w nazwach funkcji (thread_priority, thread_affinity_mask, thread_ideal_processor, thread_num_of_processors)

- Usunięto funkcje thread_last_error i thread_is_suspended

- Teraz po utworzeniu wątku trzeba zamykać jego uchwyt (za pomocą thread_close). Dzięki temu można przechwycić kod błędu wątków (thread_get_error).

 

Miałem dodać obiekty synchronizacyjne by można było lepiej zarządzać wątkami, ale okazało się, że struktura GM-a się w ogóle do tego nie nadaje, tak więc niestety... :F

 

Download: https://gmclan.org/up541_4_GMThreads2.html (9KB)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

to znaczy ze GMAPI tez ma juz wsparcie dla GM8?

no i zrodelko :D wreszcie pobawie sie watkami z GMem, idac nieco bardziej swoja droga :D

EDIT: nie sciagalem jeszcze, ale jak calkowicie w masmie to bede mial nieco duuzo czasu aby to zrozumiec wszystko. tak czy siak, sciagam, sprawdze, zobacze co fajnego to mnie nauczy, dzieki Snake :thumbsup: jak zwykle ulatwiasz zycie :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

W GMAPI w tym momencie zajmuję się interfejsami dla particli, kompatybilnością z GM8 zajmę się pod koniec, jak już wszystko co zaplanowane dodam do biblioteki ;p

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ok, jestem bardziej niż zadowolony z wątków :) Przyspieszyłem ładowanie zasobów do 1 sekundy (dokładnie 1047ms) z ponad 4. Użyłbym też do zmiany stref, ale żeby wątek dobrze działał, trzeba by na chwilę zaprzestać dezaktywacji obiektów i wtedy FPS by spadł, więc wyszło by na jedno... ale pewnie znajdę jeszcze okazje do wykorzystania, nie mniej dla samego przyspieszenia o 75% wczytywania było warto. Potem pewnie jeszcze będzie można grafiki na dwie tury rozdzielić i jeden wątek wczyta 50% drugi 50% i będzie jeszcze szybciej.

 

Wielkie dzięki za tego DLLa :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Pamiętaj tylko, że na prockach single-core ładowanie zasobów w kilku wątkach w tym samym czasie nie będzie wydajniejsze - wręcz przeciwnie, przez przełączanie kontekstu pomiędzy wątkami wydajność wykonywania kodu może być nieco niższa niż gdyby użyć jednego wątku. Najlepszym rozwiązaniem będzie wykorzystanie tylu wątków, ile rdzeni/procesorów jest w systemie.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Odkryłem pewnego buga. Gdy tworzymy jakiś wątek, to znak którego używamy do stworzenia kodu ( " lub ' ) nie może występować w skryptach które wywołujemy.

 

Np.

GML
_thread3 = thread_create("skrypt();", 0 );

GML (skrypt)
a = "test";

 

będzie błędne, musi być 'test'.

 

To pewnie jakiś bug GMa, ale może da się to obejść? Bo niestety dzisiaj godzinę zmarnowałem na szukanie gdzie jest błąd, tymczasem kwestia zamiany " na ' wszystko naprawiła.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Hm, sprawdziłem to i u mnie trybi jak powinno. Jaki błąd Ci wyskoczył? Błąd kompilacji kodu? Czy "błąd 1" wątku zwrócony przez thread_get_error?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Wiesz co, nie udało mi się sprawdzić, bo odpalałem kilka wątków na raz i tylko jeden miał problemy ale wywalało Windowsowy błąd "Wystąpił problem z aplikacją i zostanie ona zamknięta", oraz taki z czerwonym krzyżykiem, którego treści nie pamiętam (ale nie miał oskinowanego okienka w stylu XP, tylko w stylu CMD).

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Pewnie to kolejny błąd spowodowany brakiem przystosowania Game Makera do multithreadingu. Niestety, w takim wypadku nic nie mogę zrobić.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Snake człowieku rządzisz! Normalnie moja mapa (1010 obiektów :rolleyes: ) tworzyła się(generowanie losowe) prawie 5 minut, a z twoją DLL'ką zajęło to pół sekundy!!!!!!

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

A co z GM8.1? Bo obecnie mi nie działa :(

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie jest kompatybilne i z racji, ze Snake się zapadł pod ziemię, raczej nie będzie :(

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

GMThreads już nie będzie uaktualniane z racji że używanie wątków z GM za dużo problemów sprawia. Jak ktoś tak bardzo potrzebuje to może spróbować użyć tego: http://gmc.yoyogames.com/index.php?showtopic=519138 i napisać funkcje w DLL, która wywoła execute_string w wątku. Chociaż nie wiem jak to się będzie sprawować.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Szkoda, bo jak na moje potrzeby działało wszystko bezproblemowo w poprzednich wersjach GMa, a przydałby się taki mały threading...

A nie dałoby się jakoś odblokować tego sprawdzania wersji GM? To dałoby coś?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Pominięcie sprawdzania wersji nic nie da, bo GMThreads potrzebuje adresów pewnych funkcji w "runnerze" by mógł w ogóle funkcjonować. A że teraz update'y GM-a wychodzą częściej niż kiedyś to musiałbym wprowadzić automatyczne wyszukiwanie tych adresów, żeby nie aktualizować DLL-a co nową wersję GM.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Runner delphi się raczej nie zmienia i nowe ficzery nie będą dodane (np. fizyka, czy nawet wczytywanie ds_map ze stringów i CRC kluczy na nich, które doszły w Studio). A update do GM 8.1 jak widzisz na stronie głównje wyszedł 61 dni temu.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

a co z gmapi? czy udostępniłbyś cos, co pozwoli po prostu na wywoływanie scriptów (tak jak robiłem z callbackami do Ether - podawałem id scriptu, potem w gmapi execute_script i wsio), bo bez tego nie uruchomie SixthSense na gm8, a szkoda :<

ewentualnie powiedz co mogę z tym zrobić, a sam postaram się zmodyfikować gmapi pod te potrzeby, byleby możnabyło użyc tego w gm wersji > 7, płosie

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nawet jak w kolejnej wersji wprowadzi się chociaż 1 bugfix to większość kodu w runnerze się przemieszcza, więc nie widzi mi się analizowanie wszystkiego co kolejny update :)

 

Co do GMAPI to mam tam już zrobione automatyczne szukanie adresów i kilka ficzerów, ale trochę jeszcze zostało do zrobienia a teraz nie mam czasu by się tym zająć, w dodatku niedługo wyjeżdżam za granice gdzie nie będę miał dostępu do kompa, więc trochę to potrwa zanim jakiś update wydam. Póki co możesz użyć "GMAPI" z linku który podałem wcześniej w temacie, PsichiX.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×