forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Как контролировать процессы (threads) ? (http://forum.boolean.name/showthread.php?t=14288)

Reizel 23.02.2011 21:11

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

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

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

Главный файл:
Код:


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)

Mr_F_ 23.02.2011 21:40

Ответ: Как контролировать процессы (threads) ?
 
Цитата:

Вылетают самые интересные ошибки, в основном на FLIP, бывает cls и drawimage всякие.
одновременное обращение нескольких потоков к одному участку памяти вызывает краш. очевидно отрисовка графики перделки-свистелки обращается туда же, куда и загрузчики медии. не знаю что там в этих ваших блицмаксах такое, но по-хорошему надо юзать объекты синхронизации, типа мьютексы всякие. пока рисуешь перделки - берёшь мьютекс на перделковый поток, потом отпускаешь его, и загрузчик получает доступ к граф ядру.

Reizel 23.02.2011 23:12

Ответ: Как контролировать процессы (threads) ?
 
Спасибо. Нашел по Mutex-ам немного инфы. Действительно, помогло. Но, что-то DetachThread теперь не может остановить поток :-D Рисуется Загрузочный экран и игровое меню одновременно :-D
ща помучаюсь с CurrentThread...

Reizel 23.02.2011 23:50

Ответ: Как контролировать процессы (threads) ?
 
уткнулся. Создал Mutex, залочил его, попытался загрузить после этого картинку - EXCEPTION_ACCESS_VIOLATION. Графика уже инициирована, так что из за нее лагов не должно быть. Уж не знаю че делать. Пойду лучше посплю...

Черный крыс 23.03.2011 20:27

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


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot