Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Как реализовать совместное использование проэцируемого файла в память? (http://forum.oszone.net/showthread.php?t=170118)

DaRiYs 14-03-2010 16:43 1368457

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

Есть 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 1368637

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

pva 14-03-2010 23:41 1368724

Цитата:

Цитата DaRiYs
не могу работать с проэцируемой областью как с массивом»

MapViewOfFile не срабатывает?

DaRiYs 15-03-2010 00:24 1368761

Цитата:

Цитата pva
MapViewOfFile не срабатывает? »

А как с ним работать правильно?

Цитата:

Цитата lxa85
Если просто запустить 2 программы на выполнение, то каждая создаст собственное в памяти отображение файла, »

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

pva 15-03-2010 10:14 1368968

здесь пример и описание (англ)
http://msdn.microsoft.com/en-us/libr...48(VS.85).aspx

Цитата:

Цитата DaRiYs
У правильно када обе программы проэцируют один файл каждая отдельно получается ошибка выполнения »

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


Время: 16:30.

Время: 16:30.
© OSzone.net 2001-