Войти

Показать полную графическую версию : Как реализовать совместное использование проэцируемого файла в память?


DaRiYs
14-03-2010, 16:43
Помогите решить такую задачю:

Есть 2 программы и файл data.dat с 20-30 числами от 1 до 100
нужно сделать следующее

Программа №1. «Сортировка данных»

1. Включаем обработку события нажатия клавиши, и отслеживаем в нем нажатие пробела. Если пользователь нажал пробел, значит начинаем сортировку данных.
2. Выполняем проецирование файла в память. Используем для этого созданный файл data.dat. В результате получим доступ к данным как к обычному одномерному массиву.
3. Выполняем сортировку массива, любым из методов сортировки. Вставьте 1-но секундную задержку для каждой итерации сортировки массива, это позволит потом наглядней увидеть процесс сортировки.
4. По окончанию сортировки, программа выводит в окно, строку «Работа завершена».



Программа №2. «Вывод файла данных в окно»

1. Выполняем проецирование файла в память. Используем для этого созданный файл data.dat. В результате получим доступ к данным как к обычному одномерному массиву. Этот же файл проецирует в память предыдущая программа.
2. Создаем таймер на 0.5 секунды. При получении сообщения от таймера, выполняем вывод всего массива в окно. Предусмотрите корректный перевывод данных в окно, без наложений. В окно выводим не числа из массива, а строки одного и того же символа, например «*», в количестве равном числу из массива.



Запускаем на выполнение обе программы одновременно. Когда вторая программа запустилась и выполняет вывод данных в окно (выводит пока одну и туже картинку каждые пол секунды), нажимаем пробел в первой программе и она начинает сортировать массив. При этом, так как они данные берут из одного и того же файла (обе проецировали его себе в память), то первая вносит изменения переставляя данные при сортировке, а вторая выводит из себе в окно и мы видим ход процесса сортировки.

Смог сделать токо прогу с выводом данных, и то при работе с проэцируемым фыйлом как с строкой. Проблемма в общем доступе 2х програм к данным и в том что не могу работать с проэцируемой областью как с массивом.

lxa85
14-03-2010, 21:30
DaRiYs, ЕМНИП ОС вам не позволит прямое обращение к памяти выделенной другой программе. Этим достигается безопасность и изолированное(а следовательно безопасное) выполнение кода различных программ. (к сожалению нужный документ пока найти не удалось).
Для межпрограммного взаимодействия необходимо использовать именованные каналы или COM технологию. (Или иную технологию)
Если просто запустить 2 программы на выполнение, то каждая создаст собственное в памяти отображение файла, совершенно не обратив внимание, на соседку. (зачем ей умничать, если пользователю так надо?)

pva
14-03-2010, 23:41
не могу работать с проэцируемой областью как с массивом»
MapViewOfFile не срабатывает?

DaRiYs
15-03-2010, 00:24
MapViewOfFile не срабатывает? »
А как с ним работать правильно?

Если просто запустить 2 программы на выполнение, то каждая создаст собственное в памяти отображение файла, »
НУ правильно када обе программы проэцируют один файл каждая отдельно получается ошибка выполнения(

pva
15-03-2010, 10:14
здесь пример и описание (англ)
http://msdn.microsoft.com/en-us/library/aa366548(VS.85).aspx

У правильно када обе программы проэцируют один файл каждая отдельно получается ошибка выполнения »
какую именно ошибку выдаёт? ошибка совместного доступа? тогда флаги расшаривания надо поставить FILE_SHARE_READ|FILE_SHARE_WRITE. Если поставить 0, то никто кроме первого, открывшего файл, не сможет ничего сделать.




© OSzone.net 2001-2012