Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > 2D-программирование

Ответ
 
Опции темы
Старый 23.02.2011, 21:11   #1
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Как контролировать процессы (threads) ?

Заинтересовала меня данная возможность - еще ни разу не использовал, но тут потребовалось...
В общем, происходит загрузка медии, и одновременно должна быть какая-нибудь дрянь (свистелко-перделка) на экране. Без этого щяс никуда

Ну и столкнулся с проблемой контроля за процессом.

В общем, система организована так:

Главный файл:
global Loading:THread=CreateThread(loadingFunc,null)

'Loading media

Loading.Detach()

repeat
 'Main cycle...
Сам процесс:

function LoadingFunc:object(data:object)
'подготовка свистопержедных картинок
while(true)
     if(CurrentThread()=loading)
     cls
     'отрисовка дряни
     flip
     endif 
wend 
end function

Вот здесь поперли лаги. Вылетают самые интересные ошибки, в основном на FLIP, бывает cls и drawimage всякие. Почему?

А если после детача и не залагало, так графика навернется обязательно - куда-нибудь да уедет изображение с экрана (SetOrigin 0,0) посавлено )

В общем, кто чем может, помогайте 6)
(Offline)
 
Ответить с цитированием
Старый 23.02.2011, 21:40   #2
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Как контролировать процессы (threads) ?

Вылетают самые интересные ошибки, в основном на FLIP, бывает cls и drawimage всякие.
одновременное обращение нескольких потоков к одному участку памяти вызывает краш. очевидно отрисовка графики перделки-свистелки обращается туда же, куда и загрузчики медии. не знаю что там в этих ваших блицмаксах такое, но по-хорошему надо юзать объекты синхронизации, типа мьютексы всякие. пока рисуешь перделки - берёшь мьютекс на перделковый поток, потом отпускаешь его, и загрузчик получает доступ к граф ядру.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
ABTOMAT (24.02.2011), Reizel (23.02.2011)
Старый 23.02.2011, 23:12   #3
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Как контролировать процессы (threads) ?

Спасибо. Нашел по Mutex-ам немного инфы. Действительно, помогло. Но, что-то DetachThread теперь не может остановить поток Рисуется Загрузочный экран и игровое меню одновременно
ща помучаюсь с CurrentThread...
(Offline)
 
Ответить с цитированием
Старый 23.02.2011, 23:50   #4
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Как контролировать процессы (threads) ?

уткнулся. Создал Mutex, залочил его, попытался загрузить после этого картинку - EXCEPTION_ACCESS_VIOLATION. Графика уже инициирована, так что из за нее лагов не должно быть. Уж не знаю че делать. Пойду лучше посплю...
(Offline)
 
Ответить с цитированием
Старый 23.03.2011, 20:27   #5
Черный крыс
 
Сообщений: n/a
Ответ: Как контролировать процессы (threads) ?

Смотри стандартный пример тама все разжевано как грузить.
В данном случае никакой Мутекс создавать не надо. И вообще мутексы бесполезны имхо, так как давно уже есть семафоры.
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 13:44.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com