-

- 加为好友
- 发送私信
- 在线聊天
vcokwap
- 等级:

- 可用分等级:
- 总技术分:
- 总技术分排名:
|
| 发表于:2008-11-18 18:44:043楼 得分:0 |
最新测试出来的结果是:直接在界面Form1调用CreateFileMapping没重复的h出现,但我调用类里的就有重复出现 public class mem_1 { ...... public int OpenMem(ref string h, ref string pw,string strName,long lngSize) { if (lngSize <= 0 || lngSize > 0x00800000) lngSize = 0x00800000; m_MemSize = lngSize; if (strName.Length > 0) { //创建内存共享体(INVALID_HANDLE_VALUE) //_SECURITY_ATTRIBUTES attrib = new _SECURITY_ATTRIBUTES(); // m_hSharedMemoryFile = CreateFileMapping(INVALID_HANDLE_VALUE, ref attrib, PAGE_READWRITE | SEC_COMMIT, 0, (uint)lngSize, strName); m_hSharedMemoryFile = CreateFileMapping(INVALID_HANDLE_VALUE, IntPtr.Zero, (uint)PAGE_READWRITE, 0, (uint)lngSize, strName); if (m_hSharedMemoryFile == IntPtr.Zero) { m_bAlreadyExist = false; m_bInit = false; return 2; //创建共享体失败 } else { if (GetLastError() == ERROR_ALREADY_EXISTS) //已经创建 { m_bAlreadyExist = true; } else //新创建 { m_bAlreadyExist = false; } } //--------------------------------------- //创建内存映射 m_pwData = MapViewOfFile(m_hSharedMemoryFile, FILE_MAP_WRITE, 0, 0, (uint)lngSize); if (m_pwData == IntPtr.Zero) { m_bInit = false; CloseHandle(m_hSharedMemoryFile); return 3; //创建内存映射失败 } else { m_bInit = true; if (m_bAlreadyExist == false) { //初始化 } } //---------------------------------------- } else { return 1; //参数错误 } h = m_hSharedMemoryFile.ToString(); pw = m_pwData.ToString(); return 0; //创建成功 } } ----以下是调用----------------------------- form1.cs for (int i = 10000; i < 10075; i++) { string h="", pw=""; mem_1 a = new mem_1(); string sname = "yy" + i.ToString(); isCreateMyMem=a.OpenMem(ref h,ref pw,sname, 512); textBox1.Text += i.ToString()+"h:" + h.ToString() + " pw:" + pw.ToString() + "\r\n"; } 返回的h就有重复的 谢谢! | | |
修改
删除
举报
引用
回复
| |