Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Котроль расположения "Shared Memory" (только ОЗУ)

15K
05 июля 2007 года
nevi
35 / / 13.05.2007
Здравствуйте всем, моя проблема такова: я создаю несколько блоков разделяемой памяти через "CreateFileMapping", и мне нужно чтобы все эти блоки всегда находились в оперативной памяти и не сливались в свопы, т.к. очень критично время обращения к ней. Подскажите пожалуйста - как это сделать максимально-оптимальным образом, т.е. минимальным набором функций, и т.п. Буду очень признателен.
Заранее спасибо.
261
05 июля 2007 года
ahilles
1.5K / / 03.11.2005
мне кажется это нельзя сделать в user mode, поправьте меня если я ошибаюсь, ну в принципе если ты очень часто обращаешься к этим областям памяти, то они не будут сброшены в файл подкачки.
19K
06 июля 2007 года
Rost
45 / / 05.07.2007
Цитата: ahilles
мне кажется это нельзя сделать в user mode, поправьте меня если я ошибаюсь, ну в принципе если ты очень часто обращаешься к этим областям памяти, то они не будут сброшены в файл подкачки.


Обращение не всегда влияет на прибывание блоков в ОЗУ, выполнение процессов в системе очередно, и собственно если будет какойто другой процесс интенсивно использующий память то сброса в своп не избежать, единственная вероятность точно не быть сброшенным туда это наличие достаточного количества свободной памяти и высокий ПРИОРИТЕТ процесса, т.к. именно приоритет играет большую роль в распределение ресурсов.

Ну конечно можешь попробовать по таймеру писать что то в каждый блок, ну или ограничить размер своп файла 0 :) Но мне кажется это не очень хорошие идеи...

15K
06 июля 2007 года
nevi
35 / / 13.05.2007
Спасибо. На счет приоритета мысля хорошая, мне нужно поставить одинаково высокий приоритет на приложение и DLL'ку, как это делается программно?
19K
06 июля 2007 года
Rost
45 / / 05.07.2007
Приоритет потока можно утановить так, думается что и вызываемая длл получит родительский приоритет.
Код:
/*
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_TIME_CRITICAL

Приоритет варьируется от -15 до 15, 0 - стандартный.
*/

if(!SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL))
 {
  //-- Ошибко :)
 }

Можно также установить приоритет для всех потоков процесса.
Код:
/*
IDLE_PRIORITY_CLASS
BELOW_NORMAL_PRIORITY_CLASS
NORMAL_PRIORITY_CLASS
ABOVE_NORMAL_PRIORITY_CLASS
HIGH_PRIORITY_CLASS
REALTIME_PRIORITY_CLASS
*/

if(!SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS))
 {
  //-- Ошибко :)
 }
15K
06 июля 2007 года
nevi
35 / / 13.05.2007
c DLL'кой сложнее, она независима от приложения и вызывается не просто несколькими процессами сразу, но и несколькими нитями этих процессов сразу.

Я так понял - выполнять эти функции надо единожды при запуске приложения.
19K
06 июля 2007 года
Rost
45 / / 05.07.2007
Цитата: nevi
c DLL'кой сложнее, она независима от приложения и вызывается не просто несколькими процессами сразу, но и несколькими нитями этих процессов сразу.

Я так понял - выполнять эти функции надо единожды при запуске приложения.


Ну если тебе один раз надо приоритет установить и не менять его то да, единожды.
С dll решается также, путем вызова SetThreadPriority из нее. Например в DllEntryPoint. Поправьте если не прав.

261
06 июля 2007 года
ahilles
1.5K / / 03.11.2005
Цитата: nevi
мне нужно поставить одинаково высокий приоритет на приложение и DLL'ку


что за глупость? как можно поставить приоритет на DLL? приоритет можно поставить на поток или процесс

15K
06 июля 2007 года
nevi
35 / / 13.05.2007
ну, эээ.., я имею ввиду чтобы именно процедуры данной DLL выполнеялись с определенным приоритетом, чем бы при этом ни вызывались
261
07 июля 2007 года
ahilles
1.5K / / 03.11.2005
если поток имеет высокий приоритет, и он вызывает процедуру из DLL, то эта процедура тоже выполняется с высоким приоритетом.
19K
07 июля 2007 года
Rost
45 / / 05.07.2007
Цитата: ahilles
если поток имеет высокий приоритет, и он вызывает процедуру из DLL, то эта процедура тоже выполняется с высоким приоритетом.


Ну и соответственно можно из этой же процедуры установить приоритет для вызывающего потока :)

15K
08 июля 2007 года
nevi
35 / / 13.05.2007
Цитата: Rost
Ну и соответственно можно из этой же процедуры установить приоритет для вызывающего потока :)


вот! это и нужно как раз, как это сделать?:)

334
08 июля 2007 года
HexEdit
809 / / 27.07.2006
В начале этой функции - SetThreadPriority
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог