Войти
ПрограммированиеФорумОбщее

Применение многопоточности в играх. (Комментарии к статье) (10 стр)

Страницы: 15 6 7 8 9 10
#135
11:55, 13 фев. 2008

это да


#136
12:13, 13 фев. 2008

Nikopol
Так вот вся суть в том, как устроить ресайзбл буффер только на InterlockedХХХ... Я не копался глубоко в этой теме, но пока не смог придумать такой алгоритм и структуру данных... Именно это меня и интересует. С буффером фиксированного размера я уже написал...

#137
14:39, 13 фев. 2008

Отлично что статью написали! Я как раз хотел найти информацию, но ничего достойного не было!

#138
13:20, 18 фев. 2008

svn
Полностью описывать конкретную реализацию сильно не хочется, т.к. больно много в ней финтов ушами и всякого фарша. Если описать в общих чертах то:

Резервируем регион адресов для буфера. Просто регион, в котором нет памяти, его можно сделать достаточно большим, т.к. не жалко.
Делим его на две равные части.
Мапим в каждую из частей по 4кБ реальной памяти (для начала).
Буфер постепенно заполняется, сначала одна часть потом другая.
До тех пор пока первая часть буфера не будет полностью свободна, вторая часть должна расти, т.е. туда мапяться всё новые страницы.
Как только полностью освободиться от команд первая часть буфера, переходим туда и начинаем заполнять её.
Пока не освободиться вторая часть, теперь будет расти уже первая часть.
И т.д.

Таким образом, получаем в зависимости от потребности программы растущий циклический буфер команд (из двух частей), с кол-вом памяти в нём  = (кол-во не обработанных команд)*2

В случае, когда заканчиваются виртуальные адреса, т.е. буфер достигает значительных размеров (нет возможности расти), пишу в лог программы что случилась очень не здоровая хрень и блокирую добавляющий команду поток через
while ( [место не освободилось? не-а?] ) { Sleep(1); }

Страницы: 15 6 7 8 9 10
ПрограммированиеФорумОбщее

Тема в архиве.