좋아요, 어떻게 할 수 있습니까? 우리는 이것을 알아야했고, stackoverflow에 되돌릴 수 있다고 생각했습니다!
class Program
{
internal static class Win32Stuff
{
[DllImport("kernel32.dll", SetLastError = true)]
unsafe public static extern int InterlockedIncrement(int* lpAddend);
}
private static MemoryMappedFile _mmf;
private static MemoryMappedViewStream _mmvs;
unsafe static void Main(string[] args)
{
const int INT_OFFSET = 8;
_mmf = MemoryMappedFile.CreateOrOpen("SomeName", 1024);
// start at offset 8 (just for example)
_mmvs = _mmf.CreateViewStream(INT_OFFSET, 4);
// Gets the pointer to the MMF - we dont have to worry about it moving because its in shared memory
var ptr = _mmvs.SafeMemoryMappedViewHandle.DangerousGetHandle();
// Its important to add the increment, because even though the view says it starts at an offset of 8, we found its actually the entire memory mapped file
var result = Win32Stuff.InterlockedIncrement((int*)(ptr + INT_OFFSET));
}
}
이것은 작동하며 여러 프로세스에서 작동합니다. 항상 좋은 도전을 즐기십시오!
이 또한 찾고 있습니다. 혹시 해결책을 찾았습니까? – TravisWhidden
아래에 답변을 게시하셨습니다. 받아주세요!!! :) 감사. – TravisWhidden