jsmith
А он итератор возвращает))) метод GetFirst() :) Это не суть в общем)))
У меня все очень похоже
но Sleep(10) это зло
процессор будет постоянно впустую проверять - надо ли ресурс грузить или нет - вроде не тяжело, но квант времени будет стабильно кушаться.
я вместо этого имею event который выставляется в 1 при добавлении любого ресурса в очередь на загрузку и снимается в 0 при загрузке ресурса (при этом по 1 евенту загрузка проводится не для 1 а для всех ресурсов в списке). Главное - вовремя ставить/снимать евент чтобы не вышло, что евента нет и не будет, все его ждут, а ресурс в очереди стоит.
jsmith
Да, зло. Один мудрый подсказал мне обратиться к примеру - ContentStreaming из mssdk, там собственно все хорошо показано, и кстати говоря для контроля применяется семафор(тот же event почти), хорошая на мой взгляд идея.
skyformstd
> там собственно все хорошо показано, и кстати говоря для контроля применяется
> семафор(тот же event почти), хорошая на мой взгляд идея.
это не значит что она самая лучшая :) lock-free контейнеры погугли
Про lock-free знаем, но в ней нужно сначала разбираться и переписывать код чуть-чуть...
А доступ к классу по указателю это атомарная операция?
То есть я не имею в виду изменение указателя,а лишь доступ. Например -
В одном потоке -
pSome->FuncOne();
В другом -
pSome->FuncTwo()//Или даже та же функция(FuncOne();)//
То есть по идее это чтение из памяти одновременно, а это зло.
Умные указатели? ))
Или все нормально...
skyformstd
Можно сделать так
template<class T> class refLock { T* base; refLock(ref<T> ) { make mutex; } T* Get() { return base; } ~lock() { destroy mutex; } }; template<class T> class ref { T* base; T* Get() { return base; } refLock<T> GetInterlocked() { refLock<T> lock(base); return lock; } }; ref<Foo> foo = new Foo(); foo.GetInterlocked().Get() ... бла бла
Я делал так;
1. Брал размер файла, делал VirtualAlloc на размер выравненный на 4К.
2. Открывал файл как NOBUFFERING + OVERLAPPED.
3. Делал OVERLAPPED запрос на весь файл.
4. Далее стандартно - в конце кадра все ждущие ресурсы проверяют состояние, копируют данные из памяти себе, закрывают файл и убивают память через VirtualFree
Для паков требуется выравнивание файлов внутри на 4К.
Тема в архиве.