Форум: "Основная";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];
ВнизСоздание и чтение файлов в памяти Найти похожие ветки
← →
-=GaLaN=- (2003-06-02 16:52) [0]Помогите пожалуста!
Я уже задавал этот вопрос, но те примеры, что были приведены, мне не помогли. А все потому, что я вообще не разбираюсь в этом.
А смысл вот в чем. Программа запущена постоянно в фоне. Когда я запускаю вторую копию программы с каким-то параметром, как мне передать этот параметр первой копии с тем, чтобы вторую закрыть? Т.е. каким образом программа в реальном времени будет обрабатывать передаваемые ей параметры?
Я так понял, что это достигается созданием и чтение файла прямо в памяти. Но как это сделать?
← →
Stas (2003-06-02 16:55) [1]Большой ?
← →
Skier (2003-06-02 16:55) [2]
> Когда я запускаю вторую копию программы с каким-то параметром,
> как мне передать этот параметр первой копии с тем, чтобы
> вторую закрыть?
Тебе нужно запускать только одну копию приложения ?
← →
Юрий Зотов (2003-06-02 17:06) [3]Запуск единственной копии, передача параметров от второй копии первой, регистрация своего типа файлов и еще кое-что полезное:
http://www.delphikingdom.com/helloworld/samples_win.htm#link3
P.S.
"Файл в памяти" и "memory mapped file" - не одно и то же.
← →
JohnJ (2003-06-02 17:10) [4]Не знаю что там на счёт файла в памяти, но если бы мне надо было бы такое сделать, я бы попробовал так:
Первая программа читает каждую минуту (или чаще, если надо) текстовый файл.
Когда запускается вторая программа, то она записывает в этот файл новую информацию...
Эта затея будет плохой, если первая программа должна будет отреагировать сразу же, т.к. тогда придётся ставить частую проверку файла, а это будет немного, но подтормаживать систему (а может и много, не проверял...).
Тогда, если первый вариант тебе не подходит, попробуй сделать что-то типа такого: вторая программа нажимает на кнопочку первой программы, и та начинает считывать файл. Я знаю, что имитировать нажатие на кнопочку или ещё на что-нибудь можно сделать, а как - не знаю...
Если я тебе ничем не помог - жди совета мастера! :) Удачи!
← →
Serginio (2003-06-02 17:15) [5]2(JohnJ) Для этих целей существуют мьютексы и евенты. Твой вариант самый варварский по отношению к ресурсам.
← →
-=GaLaN=- (2003-06-02 17:25) [6]2JohnJ:
Именно таким извратом я и занимался раньше, причем систему это не тормозило, а теперь решил сделать по-человечески, так как из-за этой программы ОС не выходила в sleep (постоянное обращение к харду).
2Юрий Зотов:
Спасибо огромное, кажется, это именно то, что мне нужно. Буду разбираться.
← →
-=GaLaN=- (2003-06-02 21:54) [7]У меня все получилось! Остался только один вопрос...
> "Файл в памяти" и "memory mapped file" - не одно и то же.
А можно разъяснить эти понятия, если они означают не одно и то же?
← →
Юрий Зотов (2003-06-02 22:53) [8]Грубо, "на пальцах".
"Файл в памяти" - просто загруженный файл. Хотя физически он может оказаться загруженным и не весь, а действительно быть только спроецированным и грузиться постранично, по мере реального обращения, да еще с учетом буферизации и кэширования, но это уже детали. Главное же то, что с такими файлами мы работаем обычными ReadFile и WriteFile - то есть, они представляют собой последовательный поток данных, имеют текущую позицию и пр.
"Memory Mapped File" - системный объект "проекция файла". Не обязательно связан с реальным дисковым файлом, это может быть и область страничной памяти системы. Реализуется через CreateFileMapping, MapViewOfFile, OpenFileMapping, а главное то, что такой "файл" становится как бы частью памяти и с данными в нем мы работаем так же, как и с памятью - сразу обращаясь напрямую по нужному адресу, без всяких текущих позиций. Часто используются для передачи данных между процессами.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c