[XP] Wielowątkowość w RGSS - Wersja do druku
Ultima Forum
[XP] Wielowątkowość w RGSS - Wersja do druku

+- Ultima Forum (https://forum.ultimateam.pl)
+-- Dział: RPG Maker (/Forum-RPG-Maker)
+--- Dział: Wsparcie (/Forum-Wsparcie)
+--- Wątek: [XP] Wielowątkowość w RGSS (/Thread-XP-Wielow%C4%85tkowo%C5%9B%C4%87-w-RGSS)



Wielowątkowość w RGSS - dawidpieper - 22-01-14 16:50

Witam!
Ostatnio zastanawiałem się nad problemem z Graphics.update i przypomniał mi się dawny pomysł, bardzo dawny.
A mianowicie myślałem od stworzeniu wątku procesu aktualizującego grafikę. Niestety plan był wtedy dla mnie niewykonalny, nie wiedziałem jak się za to zabrać w RGSS, dopiero uczyłem się tego języka.

Teraz problem jest aktualny. Przeszukałem całą masę stron o RGSS i nic.
Jest pewien postęp: mam dwa wątki. Tyle, że gra wyłącza się jakąś sekundę - dwie po stworzeniu wątku. Oto i skrypt, którego użyłem.

Kod:
class Scene_Loading
def main
#Kod łądujący bazę danych, odczytujący konfigurację, sprawdzający dostępność aktualizacji itp. pomijam
ct = Win32API.new("kernel32","CreateThread",'pippip','i')
$threadvar = "\0" * 1024 * 1024
$thread = ct.call(nil,1024*1024,:thread.to_s,nil,0,$threadvar)
print("Wystąpił błąd w trakcie inicjacji wątku.\n\n") if $thread == 0
#Przejście do menu pomijam również
end
def thread
Win32API.new("kernel32","Beep",'ii','i').call(500,1000)
sleep(5)
end
end
Znam błędy typu nil, nile zamieniałem na '', pointery na integery itp., ale nic to nie dało. Jedyny efekt był taki, że wątek w ogule się nie tworzył.
Istnieje również funkcja BeginThread, którą chętniej bym użył, w C++ ją preferuję. Niestety nie mogę jej wykorzystać, nie mogę jej odkodować.

Z góry dziękuję za wszelką pomoc i pozdrawiam.
Dawid Pieper


RE: Wielowątkowość w RGSS - dawidpieper - 23-01-14 16:19

Witam!
Problem został rozwiązany.
Szukałem biblioteki zlib do rubiego. Przeszukując dostępne biblioteki znalazłem bibliotekę Thread.
Skopiowałem ją do Rpg Maker'a i działa.

Podaje rozwiązanie dla zainteresowanych.

Nad main należy wkleić następujący skrypt:
Spoiler: (Otwórz)
W skrypcie znajduje się instrukcja, ale na wszelki wypadek ją przepiszę.
W miejscu,gdzie uruchomiony ma zostać nowy wątek, piszemy
Kod:
Thread.new {
#instrukcje wątku
}

Pozdrawiam
Dawid Pieper