如何设置dwFileOffsetHigh& dwFileOffsetLow在地图文件视图中的值?

时间:2016-02-26 19:25:47

标签: multithreading delphi delphi-2010 map-files

我是内存映射的新手,我想做的是在多个线程之间共享一个映射文件,为此我需要创建映射文件并使用函数:MapViewOfFile所以每个线程都可以访问对于文件的一部分,当然我需要将视图的偏移量发送到尊重分配粒度的每个线程。但我不明白的部分是:dwFileOffsetHigh& dwFileOffsetLow。 MSDN说:

  

高偏移量和低偏移量的组合必须在文件映射中指定偏移量。

那么如何设置这两个参数的值,使它们能够指定正确的偏移量。我是否需要进行任何计算或仅使用变量,系统处理其余的(找到偏移量)?我真的坚持这个,每次我试一试都得到一个异常。因此,假设我知道每个视图的偏移量和大小,我怎么可能知道这些参数的值呢?一个例子值得一千个解释。以下是对我要做的事情的解释:

// The main thread create map file and specify the view for every worker thread:
WorkerThreads[i] := WorkerThread.create(...,bloc_offset,bloc_size,...); // So each worker writes in a specified view.
//The worker thread then opens the view and writes data in:
data := mapViewOfFile(mapfileH, FILE_MAP_WRITE, dwFileOffsetHigh, dwFileOffsetLow, blocSize);`

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

如果您的文件大小为< = 2GB,则可以将所需的偏移量作为DWORD传递给每个线程,然后每个线程可以将其偏移量直接分配给dwFileOffsetLow并设置{{1到0。

dwFileOffsetHigh

如果您的文件是>大小为2GB,将所需的偏移量作为pView := MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, offset, size); Int64传递给每个线程,然后使用ULARGE_INTEGER变量将值分解为其低和高组件,然后可以被分配到UInt64dwFileOffsetLow

dwFileOffsetHigh