CRUSIS 9000
Модератор: Модераторы
я помню, ты что-то писал о некоем ручном подсчёте ссылок, можешь плз сказать, в каком файле у тебя код, ответственный за это? хочу сравнить с теми реализациями, над которыми я раздумывал
hinst
ВНИМАНИЕ! КОНЦЕНТРАЦИЯ ВЕЛОСИПЕДОВ В МОДУЛЕ ЗАШКАЛИВАЕТ
https://sourceforge.net/p/rr-rr/code/45 ... m.pas#l257
Здесь это tObject и несколько функций после него. Писал уже довольно давно и не все решения показали себя удачными. Например, типичная работа со ссылкой выглядит как
а у нормальных людей —
Сейчас мне мой вариант нравится меньше, выбрал его из-за "симметричности", что ли, более того, без дополнительных мер он потоконебезопасен — между QueryObject и MakeRef ссылка может застрять с refcount = 0, и если кто-нибудь в это время её захватит и освободит... Но парадигму я уже вряд ли буду менять глобально — просто тем немногим функциям, которые должны потокобезопасно возвращать reference-counted объект, меняю поведение на второй вариант. (пример).
ВНИМАНИЕ! КОНЦЕНТРАЦИЯ ВЕЛОСИПЕДОВ В МОДУЛЕ ЗАШКАЛИВАЕТ
https://sourceforge.net/p/rr-rr/code/45 ... m.pas#l257
Здесь это tObject и несколько функций после него. Писал уже довольно давно и не все решения показали себя удачными. Например, типичная работа со ссылкой выглядит как
Код: Выделить всё
link = MakeRef(QueryObject() {refcount = 0!} ); // refcount = 1
DoWork(link);
Release(link); // refcount = 0а у нормальных людей —
Код: Выделить всё
link = QueryObjectRef(); // refcount = 1
DoWork(link);
Release(link); // refcount = 0Сейчас мне мой вариант нравится меньше, выбрал его из-за "симметричности", что ли, более того, без дополнительных мер он потоконебезопасен — между QueryObject и MakeRef ссылка может застрять с refcount = 0, и если кто-нибудь в это время её захватит и освободит... Но парадигму я уже вряд ли буду менять глобально — просто тем немногим функциям, которые должны потокобезопасно возвращать reference-counted объект, меняю поведение на второй вариант. (пример).
Mirage писал(а):кернинг
Угу, только что добавил поддержку кернинговых пар.
Mirage писал(а):FreeType, кстати какой версии? Тот, что на паскаль портирован или сишная либа?
Последней стабильной с их сайта (2.5.0.1 или какая там), заголовок скопипастил руками из API reference — во-первых, только то, что нужно, во-вторых, чтобы наружу выставить сразу обёртку. https://sourceforge.net/p/rr-rr/code/45 ... eeType.pas
Вынес оконный цикл в отдельный поток. Просьба потестить вообще, а особенно на XP с window.allowMT = true в конфиге.
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Научился паковать атласы (http://clb.demon.fi/files/RectangleBinPack.pdf).
Хм, не знал, что даже под это подвели научную базу. Взято на заметку.
debi12345
...Насколько эмпиричненькой такой эвристике подходит описание "научная база". ^^"
Завтра покурю кондишон вариэйблс короче.
...Насколько эмпиричненькой такой эвристике подходит описание "научная база". ^^"
Завтра покурю кондишон вариэйблс короче.
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Если бы еще можно было расставлять картинки не в порядке убывания или возрастания размера, а псевдо-рандомно...
Добавлено спустя 4 минуты 55 секунд:
Хотя ипользуя мощь современных компов, можно любые относитель небольшие расстановки и прочие законы распределения делать просто перебирая случайные варианты, пока не выпадет нужный - еснно с заданной погрешностью (иначе возможен бесконечный цикл). Именно так в свое время сделал симулятор гауссового распределения - эмулятор эспериментальных "измерений" под заданный конечный результат
Добавлено спустя 4 минуты 55 секунд:
Хотя ипользуя мощь современных компов, можно любые относитель небольшие расстановки и прочие законы распределения делать просто перебирая случайные варианты, пока не выпадет нужный - еснно с заданной погрешностью (иначе возможен бесконечный цикл). Именно так в свое время сделал симулятор гауссового распределения - эмулятор эспериментальных "измерений" под заданный конечный результат
debi12345 писал(а):делать просто перебирая случайные варианты
Замечательное решение NP-сложной задачи, ага. Особенно когда элементов меньше 5. ;3
Переписал события на condition variables (Vista+). В 2 раза быстрее, так-то.
ВНЕЗАПНО! Добавил в движок сущность condition variable наравне с event и почти всё на них переписал. CV — классные.
P.S. CV на XP эмулируются ивентами, ивенты на Vista+ эмулируются CV. :‐) Embarcadero так умеет?
P.S. CV на XP эмулируются ивентами, ивенты на Vista+ эмулируются CV. :‐) Embarcadero так умеет?
runewalsh писал(а): CV на XP эмулируются ивентами
Embarcadero умеет.
Код: Выделить всё
InitializeConditionVariableProc := GetProcAddress(Module, 'InitializeConditionVariable'); // do not localize
if @InitializeConditionVariableProc = nil then
begin
InitializeConditionVariableProc := InternalInitConditionVariable;
...
В обратную сторону видимо нет, хотя вроде есть TConditionVariableMutex.
kipar писал(а):Embarcadero умеет.
:OKAY:
В обратную не особо и нужно, на самом деле — заметно быстрее "ядерных" ивентов, но пролетают MsgWait* и, отчасти, WaitForMultipleObjects.
