bartas Opublikowano 16 Lutego 2010 Udostępnij Opublikowano 16 Lutego 2010 Siema, po pierwsze nie wiem czy dobry dział bo problem może być prosty :P dwa: mam taki kod w stepie GML loadthr=thread_create(" section_init() section=x div 1000 + y div 1000 * 3; section_load(section,'mapa.ini')",1) if ( loadthr ) { thread_set_priority( loadthr, 3 ); thread_resume( loadthr ); } else show_message("Nie mozna stworzyc wątka") funkcje section_init() i section_load() działają poprawnie bo wszystko się ładuje, ale zaraz po uruchomieniu gry (obiekty już się wczytały) gra wywala kilka błędów których nigdy wcześniej nie było, a następnie windowsowy błąd "Aplikacja strange.exe przestała działać" ;/ używam gm8, gmthreads 2.0, vista basic Pomocy. EDIT: dodam że bez użycia wątków wszystko działa. EDIT2: Obecnie kod wygląda tak: GML loadthr=thread_create("while(true){ section=x div 1000 + y div 1000 * 3; section_load(global.section,'mapa.ini') } ",1) if ( loadthr ) { //thread_set_processor(loadthr,0) thread_set_priority( loadthr, 3 ); thread_resume( loadthr ); } else show_message( "Nie mozna stworzyc watku" ); Żadne błędy nie wyskakują, ale kod GML while(true){ section=x div 1000 + y div 1000 * 3; section_load(global.section,'mapa.ini') } się nie wykonuje (powinien tworzyć obiekty) :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Snake Opublikowano 17 Lutego 2010 Udostępnij Opublikowano 17 Lutego 2010 Crash zdarza się, gdy jeden z wątków odwołuje się do pamięci, która w tym samym momencie jest modyfikowana przez inny wątek (np. poprzez operowanie na zmiennych, strukturach danych etc.). Możliwe też, że użyłeś w tych skryptach section_* jakichś funkcji GML nie przystosowanych do MT. No i z tego co widziałem na gmc.yoyogames.com w temacie GMThreads, zdaje się, że samo używanie skryptów w wątkach nie trybi tak jak trzeba (niepoprawne argumenty są przekazywane) :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 18 Lutego 2010 Udostępnij Opublikowano 18 Lutego 2010 a wiec czy zadziala wtedy pobranie tresci skryptu, podmiana przez string_replace_all() argument0 itp na konkretne wartosci argumentow i tworzenie watku na wynikowym stringu kodu? GML (SectionLoadThread) global.text=script_get_text(section_load) for(i=0;i<12;i+=1) global.text=string_replace_all(global.text,'argument'+string(i),string(argument)) thread_execute(3,global.text) // nie pamietam nazwy funkcji od wykonania watku;P</span> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bartas Opublikowano 18 Lutego 2010 Autor Udostępnij Opublikowano 18 Lutego 2010 Crash zdarza się, gdy jeden z wątków odwołuje się do pamięci, która w tym samym momencie jest modyfikowana przez inny wątek (np. poprzez operowanie na zmiennych, strukturach danych etc.). Możliwe też, że użyłeś w tych skryptach section_* jakichś funkcji GML nie przystosowanych do MT. No i z tego co widziałem na gmc.yoyogames.com w temacie GMThreads, zdaje się, że samo używanie skryptów w wątkach nie trybi tak jak trzeba (niepoprawne argumenty są przekazywane) :/ W skrypcie używam funkcji: ini_open(), ini_close(), ini_read_real/string(), instance_create() i operacje na zmiennych globalnych i zmiennych innych obiektów (np. engine.object_index) Teraz nie używam skryptu tylko skopiowałem jego kod i wkleiłem w thread_create() i nadal to samo. Wątek tworze tylko ten jeden, poza tym nigdzie indziej nie używam tych zmiennych :( może to dlatego że tworzę obiekty? No ale teraz nic się nie tworzy czyli kod nie jest wykonywany. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bartas Opublikowano 20 Lutego 2010 Autor Udostępnij Opublikowano 20 Lutego 2010 1. Sry za doubleposta, ale nikt by nie zauważył jakbym zedytował, a problem musi być rozwiązany bo bez niego nie mogę kontynuować 2. Teraz jak tylko uruchamiam grę to FPS wynosi jeden, wątek próbuje się zamknąć ale mu nie wychodzi więc trzeba wymusić zamknięcie, potem gra się zamyka, wyskakuje komunikat "strange.exe nie odpowiada", a potem: "Exception EOSError in module strange.exe at 00010B31. System error. Code: 1400 Nieprawidłowe dojście okna", następnie: "Acces violation at adress 721A4A25. Read of address 721A4A25" 3 razy, a potem znowu "strange.exe nie odpowiada" :( Proszę pomocy. Teraz zauważyłem że błędy zależą od kaprysu kompa. Teraz po prostu gra się wyłączyła z komunikatem "strange.exe nie odpowiada" . Po ponownym włączeniu to co na początku. I jeszcze czasaami wyskoczy błąd że nie może znaleźć zmiennej w obiekcie "obj_krzak". Najgorsze jest to że ta zmienna w tym obiekcie jest zadeklarowana i dopóki nie użyłem wątków wszystko działało :( EDIT: zapomniałem dodać że funkcje działają, bo jak gra działała 2 sekundy to widziałem jak się obiekty wczytują :) chyba jedyna dobra wiadomość EDIT2: a może dlatego że zmienne których używam w wątku deklaruje w create, a nie w tym wątku? EDIT3 :P : wydaje mi się że obiekty są za wolno tworzone (jak nie używałem wątków wszystko się ładowało szybko) i to powoduje wyskakiwanie błędów GMowych co powoduje crasha... tylko jak to rozwiązać? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę