概述MapViewOfFile中的信号量的最佳方法 – C ++
你好StackOverflow的用户。
我一直在从C ++的Win32 API的MapVIEwOffile工作,我是一个新手,但我一直在试图为一个mapvIEw文件创build一个信号量,所以一个实例不能复制到它,除非另一个实例已经复制到它,主实例已经读取它。
我得到的想法是创build不同的方法来做到这一点,但我需要知道做到这一点的最佳方法。
1)使用while循环等待mapvIEwfile为空。
我试图做到以下几点:
你可以访问标准的windowsstring,如“取消”?
设置非Office文件的windows文件属性
windows Phone 8上的ARM NEON程序集无法正常工作
有一个编程方式,我可以挂钩到用户login和注销(windows SBS 2003)的目标是简单的日志logging?
exec():在windows中引用完整的命令
mapVIEwfile = (LPTSTR) MapVIEwOffile(mapVIEw,file_MAP_ALL_ACCESS,SH_MAX_MEMORY); if(mapVIEwfile!=NulL){ // Wait for the mapvIEwfile to be empty. while(mapVIEwfile!=\”\”); // This while is only for delay the operation and wait for the mapvIEwfile it\’s empty,we don\’t need any action in this while. copyMemory((PVOID)mapVIEwfile,defaultalloc,(_tcslen(defaultalloc) * sizeof(TCHAR))); UnmapVIEwOffile(mapVIEwfile); } CloseHandle(mapVIEw);
所以,当mapvIEwfile是空的时候,while被跳过,“secondary”实例复制到它,然后主实例读取它并清空mapvIEwfile,这会生成一个信号量。
2)使用互斥体
另一种方法是使用CreateMutex的Win32 API中的互斥体
我还没有与此工作,但我想我可以做这个我想做的事情。
所以,我的问题如下:
哪种方式最好做我想做的事情? (在1段中解释)
mapvIEwfile这样做没有问题吗? (记住我想要与主实例通信两个或多个实例)。
这些是问题,谢谢。
为什么MS不能使用.Net打开?
windows堆栈跟踪中的函数名称
Python popen python.exe
如何使用nodeJs禁用Chrome的会话恢复警告?
永远不会结束Win32消息循环
您正在寻找同步访问共享资源。 要做到这一点的方法是使用同步对象。 这意味着使用互斥体。
使用互斥意味着你可以做空闲的等待而不是繁忙的循环。 而且你也不需要关心编译器优化掉while循环中mapVIEwfile的读取。 如果你有多个进程,那么你就有了一个数据竞争,如果没有互斥或者等价的话,你就无法解决这个问题。 您的第一个选项在这种情况下无法工作。
顺便提一句,你需要在while循环测试中使用strcmp 。 这是因为mapVIEwfile!=\”\”总是评估为真。
总结
以上是内存溢出为你收集整理的MapViewOfFile中的信号量的最佳方法 – C ++全部内容,希望文章能够帮你解决MapViewOfFile中的信号量的最佳方法 – C ++所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容