|
15.03.2013, 00:49
|
#91
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Я новичок!
Необходимо реализовать передачу кванта процессорного времени другим потокам. Самый ломовой (учитывая б3д) способ - вставить Delay 1 в конце тела цикла (ну можно ив начале - сами там, исходя из конкретики решаемой задачи, определитесь). По идее это должно спровоцировать переключение на другой поток и выделение ему некоторого дискретного минимального времени (вероятно, большего чем 1мс). В том виде, в каком код приведён сейчас, вы, фактически и говорите системе: выполнять с такой производительностью, с какой только возможно - именно поэтому нагрузка на цп 99%.
(фрагмент статьи про многопоточность, касающийся темы)
А вообще - концептуально касаясь производительности код, условно (ох сейчас меня закидают за придумывание терминологии) можно разделить на два типа: "взаимодействие" и "работа". Первый вариант кода: подгруздка данных из сети, мониторинг портов, обновление GUI, реакция на ввод пользователя - не должны выполняться в бесконечном цикле без всяких ограничений, как то: событие от таймера, от внешнего потока, сообщающего о необходимости перерисовать окошко, прочитать сетевые пакеты из буфера и т.п. Второй вариант кода: грубо говоря, разнообразные расчёты (так или иначе решаемые на ПК задачи формализуются до вычислений). Причём во втором случае - всю необходимую для вычислений информацию мы уже получили благодаря коду "взаимодействия". Глупо ограничивать себя и не стараться выполнить задачу как можно быстрее. Последнее, разумеется не касается неких гибридных вариантов, где вычисления выполняются фоном, так как их тяжесть (негативный эффект создаваемый неконтролируемой нагрузкой) критичнее, времени их работы (например: архивация большого обёъма данных; размазанный во времени обработчик ИИ юнитов в RTS [когда каждый кадр принимается решение только по некоторому количеству юнитов, чтобы сгладить выбросы в нагрузке, избежав подлагивания картинки]).
Вы привели код явно для "взаимодействия" а закодили его как "работа".
Пример из жизни:
код для вычисления сотни примеров:
быстро-быстро берём и решаем первый, затем второй и т.д.
код для взаимодействия:
-Петя, как освободишься - дай знать, а я пока посплю.
Неудачная архитектура (применения подхода "работа" в задаче "взаимодействие"):
В данном случае, Ослу не имеет смысл создавать повышенную нагрузку на ЦП (Шрек* - будем рассматривать именно их диалог, хотя Шрека то и дело подменяет Феона), т.к. очевидно, что:
1) такое разрешение по времени не нужно;
2) рациональнее "уснуть" и ждать наступления события.
*-на самом деле по аналогии это сущность персонализирующая собой совокупность "ЦП+поток оценки геоположения". Можно рассмотреть ситуацию иначе: первый поток - это Осёл, второй - Шрек, воздух (среда, позволяющая информации распространятся в виде звуковых колебаний) - шина передачи данных. Вместо того, чтобы ожидать сигнального пакета от второго потока, первый флудит в шину с максимальной частотой, делая невозможной работу третьего потока - Феоны - из-за перманентной занятости шины. ЦП - это некий формальный исполнитель программы с тремя потоками**: два из них постоянно работают со структурой (интерфейсной частью шины данных), третий поток спит (т.к. его культурность алгоритмически обозначает необходимость дождаться одновременной доступности в течение некоторого времени*** шины [разрешающего значения сигнального поля интерфейсной структуры] и доступности одного из потоков, с которым предстоит вести диалог - нетрудно заметить что это событие не наступит никогда: Осел или Шрек свободны, только когда говорит второй из них, т.е. занята шина).
**- ну это уже вопрос философии. С солипсистской точки зрения, все живые существа управляются на единственном реальном cpu - вашем мозге. См. ещё Телеология, Логос.
Здесь же мы рассматриваем локальный участок вселенной (внутри кареты), поэтому строим модель только для него.
*** - задержку можно интерпретировать как долгую реакцию, связанную с низким приоритетом потока Феона (планировщик выделяет квант Феоне так редко, что возможность говорить к этому времени всегда уже обнаруживает Осёл или Шрек), или как искусственную задержку в работе, величина которой позволяет отделить событие "пауза между словами" и "тишина".
В сущности, все модели неправильны, но некоторые полезны
|
Джордж Бокс
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
Последний раз редактировалось impersonalis, 15.03.2013 в 02:05.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
15.03.2013, 00:51
|
#92
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: Я новичок!
Сообщение от boajuse
после экспериментов с блитцем3д наткнулся на проблему чрезмерной загрузки процессора. Например, код:
"repeat
print "hello world"
until keyhit(1)"
при исполнении грузит проц на 99%.
это нормально?дебуггер отключен.
|
Это нормально, блиц сжирает всё свободное процессорное время. Добавление в простой бесконечный цикл Delay(1) разгрузит проц. Ну это всё конечно если мне память не изменяет. На форуме эта тема вроде поднималась неоднократно.
Во, Impersonalis опередил
апд: Моё 1000-е сообщение! Юбилей
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо St_AnGer за это полезное сообщение:
|
|
16.03.2013, 13:16
|
#93
|
AnyKey`щик
Регистрация: 15.03.2013
Сообщений: 2
Написано одно полезное сообщение
|
Ответ: Я новичок!
спасибо за ответы, хотя я уже почти решил переходить на BlitzMax - там есть альфа-прозрачность для изображений по умолчанию(или в B3d тоже есть?)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.03.2013, 13:41
|
#94
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Я новичок!
Сообщение от boajuse
спасибо за ответы, хотя я уже почти решил переходить на BlitzMax - там есть альфа-прозрачность для изображений по умолчанию(или в B3d тоже есть?)
|
Очень разумное решение, если хочешь мутить 2д игру. Действительно, в максе есть не только прозрачность, но и другие доставляющие методы смешивания, плюс все это на порядок быстрее рисуется, нежели в блице, ибо реализовано через тот же 3д.К тому же присутствуют некоторые етоды отрисовки, которых опросту нет в блице - например, многоугольники(закрашенные, а при должном умении - еще и текстурированные), в общем это стопроцентный форвард) к тому же, в максе сам язык более гибок, ООП и ништяки из коробки. Плюс поддержка модулей и кода, написанного на С/С++(что иной раз очень необходимо), и возможность невозбранно прикрутить 3д-часть от самого блица, и использовать его в качестве рендера. А лучше хорс. Вот)
|
(Offline)
|
|
15.09.2013, 03:04
|
#95
|
AnyKey`щик
Регистрация: 15.09.2013
Сообщений: 13
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Я новичок!
Здравствуйте. У меня беда с загрузкой b3d. Загружаю и ставлю камеру в позицию объекта “geroy”. Но камера оказывется совершенно в другом месте.
For q%=1 To CountChildren (vr%)
vr1%=GetChild (vr%,q%)
vrt$=EntityName$(vr1%)
If vrt$<>"" Then
vrt1$=Lower$(vrt$)
If Instr(vrt1$,"door")>0 Then
EntityParent vr1%,0
t%=CopyEntity (vr1%)
FreeEntity vr1%
End If
If Instr(vrt1$,"geroy")>0 Then;ãëàâíûé ãåðîé
EntityParent vr1%,0
pl%=CopyEntity (vr1%,0)
cam%=CreateCamera (pl%)
End If
End If
Next
Что я не так делаю?
|
(Offline)
|
|
15.09.2013, 03:16
|
#96
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,023
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Я новичок!
Сообщение от harmon
Здравствуйте. У меня беда с загрузкой b3d. Загружаю и ставлю камеру в позицию объекта “geroy”. Но камера оказывется совершенно в другом месте.
For q%=1 To CountChildren (vr%)
vr1%=GetChild (vr%,q%)
vrt$=EntityName$(vr1%)
If vrt$<>"" Then
vrt1$=Lower$(vrt$)
If Instr(vrt1$,"door")>0 Then
EntityParent vr1%,0
t%=CopyEntity (vr1%)
FreeEntity vr1%
End If
If Instr(vrt1$,"geroy")>0 Then;ãëàâíûé ãåðîé
EntityParent vr1%,0
pl%=CopyEntity (vr1%,0)
cam%=CreateCamera (pl%)
End If
End If
Next
Что я не так делаю?
|
"Что, где, когда."
|
(Offline)
|
|
15.09.2013, 03:25
|
#97
|
AnyKey`щик
Регистрация: 15.09.2013
Сообщений: 13
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Я новичок!
vr%=loadanimmesh("lab.b3d");Загрузка комнаты
For q%=1 To CountChildren (vr%);Перебор всех элементов b3d
vr1%=GetChild (vr%,q%);Очередной элемент
vrt$=EntityName$(vr1%);Его имя
If vrt$<>"" Then;Если имя есть
vrt1$=Lower$(vrt$);Все буквочки делаем строчные
If Instr(vrt1$,"door")>0 Then;Если это дверь
EntityParent vr1%,0
t%=CopyEntity (vr1%)
FreeEntity vr1%
End If
If Instr(vrt1$,"geroy")>0 Then;Если это глав герой
EntityParent vr1%,0;Отвязываем его от всего B3d
pl%=CopyEntity (vr1%,0);Создаем копию
cam%=CreateCamera (pl%);привязываем камеру к копии
End If
End If
Next
Камера оказывается ровно в центре а не там где должна. Объект geroy находится на месте.
|
(Offline)
|
|
15.09.2013, 03:40
|
#98
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,023
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Я новичок!
harmon, если ты ставишь координаты только
cam%=CreateCamera (pl%);привязываем камеру к копии
То координаты камеры от этого не меняются, используй PositionEntity (ent,x,y,z)
Зачем ты вбрасываешь куски кода? Думаешь здесь сидят программисты-гадалки, по огрызку кода понимают проблему =/
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.09.2013, 03:50
|
#99
|
AnyKey`щик
Регистрация: 15.09.2013
Сообщений: 13
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Я новичок!
Не получилось. Камера оказывается ровно по середине меша.
|
(Offline)
|
|
15.09.2013, 04:14
|
#100
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,023
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Я новичок!
Сообщение от harmon
Не получилось. Камера оказывается ровно по середине меша.
|
Сейчас я покурю каучук и прозрею в чём твоя проблема...
[затягивает]
Вижу PositionEntity неправильно используешь ты...
[затягивает]
Камера в координатах объекта что бы была, EntityX() (а так же EntityY() и EntityZ()) применит надо тебе.
PositionEntity cam,EntityX (obj),EntityY (obj),EntityZ (obj)
cam - камера (или любой другой энтити)
obj - объект в чьи координаты надо ставить камеру...
[затягивает]
Файлы помощи блица держи Вложение 19679, на русский переведён он. Найдёшь помощь сильную там...
Распаковывать сюда ... \Blitz3D\help - подтвердить замену файлов.
[затягивает]
Ап
окай что то я и правда укурился...
А вот так например написать несудьба?
PositionEntity cam,EntityX (obj), EntityY (obj)+5,EntityZ (obj)
|
(Offline)
|
|
15.09.2013, 04:15
|
#101
|
AnyKey`щик
Регистрация: 15.09.2013
Сообщений: 13
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Я новичок!
Я именно так и применил PositionEntity cam%,EntityX(pl%),EntityY(pl%),EntityZ(pl%)
Объект (кубик geroy) находится в углу. Камера находится по середине. Вывел координаты совпадают а реальное положение нет.
Странно но координаты всех getchild 0,0,0.
|
(Offline)
|
|
15.09.2013, 04:20
|
#102
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,023
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Я новичок!
Сообщение от harmon
Я именно так и применил PositionEntity cam%,EntityX(pl%),EntityY(pl%),EntityZ(pl%)
Объект (кубик geroy) находится в углу. Камера находится по середине. Вывел координаты совпадают а реальное положение нет.
|
"Реальное положение", в смысле?
"Камера находится по середине" по середине кубика, или просто в центре 3D пространства?
Если просто применить позишен, камера оказывается в координатах кубика, то бишь в его центре, так?
Не понимаю в чём у тебя проблема, мало информации.
|
(Offline)
|
|
15.09.2013, 04:28
|
#103
|
AnyKey`щик
Регистрация: 15.09.2013
Сообщений: 13
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Я новичок!
Есть комната с дверью. В углу комнаты кубик с именем geroy (именно на его месте должна появляться камера). Загружаю узнаю где кубик (ставлю камеру). Камера не на месте кубика а ровно посередине комнаты. Проверил координаты всех CHILD - они все 0,0,0.
Проблема в том что камера не появляется на месте кубика.
Как сделать вложение в сообщение?
|
(Offline)
|
|
15.09.2013, 04:35
|
#104
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,023
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Я новичок!
Сообщение от harmon
Есть комната с дверью. В углу комнаты кубик с именем geroy (именно на его месте должна появляться камера). Загружаю узнаю где кубик (ставлю камеру). Камера не на месте кубика а ровно посередине комнаты. Проверил координаты всех CHILD - они все 0,0,0.
Проблема в том что камера не появляется на месте кубика.
Как сделать вложение в сообщение?
|
В расширенном режиме, внизу есть кнопка "Управление вложениями", справа над окошком ввода текста, свиток - "вложения".
Выложи исходник с медией, посмотрю что там.
Надеюсь там не ололо-сто страниц кода
|
(Offline)
|
|
15.09.2013, 04:40
|
#105
|
AnyKey`щик
Регистрация: 15.09.2013
Сообщений: 13
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Я новичок!
Вот эта штука не работает.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:41.
|