Skocz do zawartości

[DLL] GMThreads


Rekomendowane odpowiedzi

  • 8 miesięcy temu...
  • Odpowiedzi 172
  • Dodano
  • Ostatniej odpowiedzi

Top użytkownicy w tym temacie

Top użytkownicy w tym temacie

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)

Odnośnik do komentarza
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 :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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 :)

Odnośnik do komentarza
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.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...
  • Administratorzy

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.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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).

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 rok później...
  • 2 miesiące temu...

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ć.

Odnośnik do komentarza
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ś?

Odnośnik do komentarza
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.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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.

Odnośnik do komentarza
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

Odnośnik do komentarza
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.

Odnośnik do komentarza
Udostępnij na innych stronach

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

Jedynie 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ę poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

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

×
×
  • Dodaj nową pozycję...