Форум: "Прочее";
Текущий архив: 2013.04.14;
Скачать: [xml.tar.bz2];
ВнизПроблема с memory-mapped file Найти похожие ветки
← →
Kerk © (2012-12-18 17:42) [0]На странную проблему наткнулся.
В процессе #1 делаю:FileHandle := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, BufSize, PChar(FileName));
FileBuf := MapViewOfFile(FileHandle, FILE_MAP_WRITE, 0, 0, 0);
Move(Buf, FileBuf, BufSize);
UnmapViewOfFile(FileBuf);
...
В процессе #2 делаю:FileHandle := OpenFileMapping(FILE_MAP_READ, True, PChar(FileName));
FileBuf := MapViewOfFile(FileHandle, FILE_MAP_READ, 0, 0, 0);
Move(FileBuf, Buf, BufSize);
...
Во втором процессе файл открывается, MapViewOfFile отрабатывает, но буфер пустой.
Чувствую, какую-то мелочь упускаю.
← →
dummy_user (2012-12-18 18:16) [1]Если не секрет, для каких надобностей используете memory-mapped file?
← →
брат Птибурдукова (2012-12-18 18:17) [2]
> Move(Buf, FileBuf, BufSize)
Шапку не потерял?
← →
Kerk © (2012-12-18 18:20) [3]
> dummy_user (18.12.12 18:16) [1]
Между процессами данные передаю. Очевидно же из вопроса :)
> брат Птибурдукова (18.12.12 18:17) [2]
Поясни-ка
← →
брат Птибурдукова (2012-12-18 18:22) [4]Может так? Move(Buf^, FileBuf^, BufSize)
← →
dummy_user (2012-12-18 18:28) [5]
> Kerk © (18.12.12 18:20) [3]
>
>
> > dummy_user (18.12.12 18:16) [1]
>
> Между процессами данные передаю. Очевидно же из вопроса
> :)
Про процессы очевидно.
А почему таким способом - нет.
← →
Inovet © (2012-12-18 18:31) [6]> [5] dummy_user (18.12.12 18:28)
> А почему таким способом - нет.
Стоит подумать какие есть способы и какая между ними разница.
← →
Kerk © (2012-12-18 18:32) [7]
> брат Птибурдукова (18.12.12 18:22) [4]
> Может так? Move(Buf^, FileBuf^, BufSize)
На самом делеMove(Buf, FileBuf^, BufSize);
Но именно оно. Спасибо огромное!
Чувствовал, что какая-то мелочь, но замучался уже :)
← →
Медвежонок Пятачок © (2012-12-18 18:34) [8]LPVOID WINAPI MapViewOfFile(...
Move( const Source; var Dest; count : Integer );
Конечно домика не хватает
← →
брат Птибурдукова (2012-12-18 18:35) [9]
> А почему таким способом - нет.
Ненаказуемо! %-)
← →
Kerk © (2012-12-18 18:37) [10]
> dummy_user (18.12.12 18:28) [5]
>
> > Kerk © (18.12.12 18:20) [3]
> >
> >
> > > dummy_user (18.12.12 18:16) [1]
> >
> > Между процессами данные передаю. Очевидно же из вопроса
>
> > :)
>
> Про процессы очевидно.
> А почему таким способом - нет.
Можно и другим. А данный конкретный чем не нравится?
Вроде удобно :)
← →
Игорь Шевченко © (2012-12-18 18:55) [11]Never attribute to malice... :)
← →
Sapersky (2012-12-18 21:46) [12]Кстати, кто-нибудь пробовал передавать через мэп-файл большие объёмы данных?
Ну например, отмэплено 600 мб, один процесс использует эту память для работы как кольцевой буфер, другой забирает оттуда порциями по 30 мб. Плюс ещё около 600+300 мб расходуется неотмэпленной.
Через некоторое время свободная память у 32-битной Win7 заканчивается. Не то чтобы out of memory, но постоянный своп при попытке что-то ещё сделать. Отчего такое - непонятно, по расчётам 3 с лишним Гб должно хватать.
На 64 бита перейти пока не получается. Вариант "переписать всё нафиг с передачей меньших объёмов" рассматривается, но нежелателен.
← →
Eraser © (2012-12-18 21:53) [13]
> Sapersky (18.12.12 21:46) [12]
в свое время нужно было найти наиболее быстрый IPC. тестировал MMF в сравнении с named pipe - фактически тоже самое по скорости. не знаю как для твоей задачи, но почти во всех случаях pipes использовать куда удобнее.
← →
Sha © (2012-12-18 22:02) [14]> Sapersky (18.12.12 21:46) [12]
работал с очень большим файлом (гигабайты),
мапил кусками по 64к без потери скорости
← →
Игорь Шевченко © (2012-12-18 22:07) [15]Sapersky (18.12.12 21:46) [12]
> Кстати, кто-нибудь пробовал передавать через мэп-файл большие
> объёмы данных?
Вообще система пробует. Файловый кэш так организован. Вроде работает :)
← →
Kerk © (2012-12-18 22:07) [16]
> Eraser © (18.12.12 21:53) [13]
Чем удобнее?
← →
Eraser © (2012-12-19 09:07) [17]
> Kerk © (18.12.12 22:07) [16]
тем что не нужно самостоятельно городить механизм транспорта данных. в синхронном варианте все вообще примитивно - записал данные, считал данные, на другом конце - считал данные, записал данные. можно уложиться в 5 строк кода, грубо говоря.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.04.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c