我是新来的内存映射,我想要做的是在许多线程之间共享一个映射文件,为此我需要创建映射文件并使用函数:MapViewOfFile
因此每个线程都可以访问部分文件,当然我需要将视图的偏移量发送给每个线程,以保证分配粒度。但是我不明白的部分是:dwFileOffsetHigh & dwFileOffsetLow。 MSDN说:如何在地图文件视图中设置dwFileOffsetHigh&dwFileOffsetLow值?
高偏移量和低偏移量的组合必须指定文件映射内的偏移量。
那么我怎样才能设置这两个参数的值,以便他们可以指定正确的偏移量。我是否需要进行任何计算或者只是使用变量,而系统处理其余部分(找到偏移量)?,我真的被这个问题困住了,每次我尝试一次就会得到一个异常。假设我知道每个视图的偏移量和大小,我怎么可能知道这些参数的值?一个例子值得一千个解释。这里是我想要做的解释:
// 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);`
感谢您的回答。
您是映射物理文件还是只映射内存的缓冲区?如果后者和/或映射整个文件,您通常只会传递零个文件偏移量。 –
不,我说这是一个多线程应用程序,所以每个线程写入数据从一个不同的偏移量开始,如果我通过零的文件偏移量,每个线程将写入数据抵消0.我映射的物理文件。 – Safa
这不是我会推荐的。国际海事组织,你应该在所有线程中使用相同的映射 - 你甚至可以使用相同的'数据'指针 - 只是在每个线程中抵消它。例如。线程1:数据[0] ...,线程2:数据[10000] ...等。 –