zoukankan      html  css  js  c++  java
  • c/c++常用代码 -- 共享内存

    #pragma once
    
    #include <stdio.h>
    #include <tchar.h>
    #include <string.h>
    #include <windows.h>
    
    
    
    template<class T> 
    class CMySM
    {
    public:
        CMySM()
        {
            m_pMem = NULL;
            m_hMem = NULL;
        }
    
        ~CMySM()
        {
            Close();
        }
        
    
        BOOL Create(LPCTSTR szName)
        {
            if (szName == NULL || _tcslen(szName) == 0)
                return FALSE;
                
            do
            {
                m_hMem = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, 
                    PAGE_READWRITE | SEC_COMMIT, 0, sizeof(T), szName);
                if (m_hMem == NULL)
                    break;
    
                m_pMem = MapViewOfFile(m_hMem, FILE_MAP_ALL_ACCESS, 0, 0, 0);
                if (m_pMem == NULL)
                    break;
    
                memset(m_pMem, 0, sizeof(T));
            
                return TRUE;    
            }
            while (FALSE);
    
            Close();
                    
            return FALSE;    
        }
        
        BOOL Open(LPCTSTR szName)
        {
            if (szName == NULL || _tcslen(szName) == 0)
                return FALSE;
            
            do
            {
                m_hMem = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szName);
                if (m_hMem == NULL)
                       break;
    
                m_pMem = MapViewOfFile(m_hMem, FILE_MAP_ALL_ACCESS, 0, 0, 0);
                if (m_pMem == NULL)        
                    break;
    
                return TRUE;
            }
            while (FALSE);
    
            Close();
                    
            return FALSE;
        }
        
        void Close()
        {
            if (m_pMem != NULL)
            {
               UnmapViewOfFile(m_pMem);
               m_pMem = NULL;
            }
    
            if (m_hMem != NULL)
            {
               CloseHandle(m_hMem);
               m_hMem = NULL;
            }    
        }
        
        inline T* Get(){return (T*)m_pMem;}    
        
    public:
        PVOID    m_pMem;
        HANDLE    m_hMem;
    };
  • 相关阅读:
    webIDE 第二篇博文
    前端第一天
    记昨天
    入职第四天
    入职第二天
    linux常用命令,自己总结
    一切从头开始
    在服务器上搭建SVN
    Dynamic CRM 365学习历程--JS
    Dynamic CRM 365学习历程--有关CRM的学习过程种需要注意的事项
  • 原文地址:https://www.cnblogs.com/vc60er/p/4067968.html
Copyright © 2011-2022 走看看