zoukankan      html  css  js  c++  java
  • 利用Event和MapFile进程共享信息

    工作过程:


    进程一, 建立映射文件,填写数据,并发出Event的信号;


    进程二,打开映射文件,收到Event的信号时读取数据.

    #include <windows.h>
    #include 
    <string.h>
    #include 
    <iostream>
    using namespace std;

    #define FILE_SIZE 1024

    static HANDLE hMapFile;
    static LPVOID lpMapAddress;
    static LPCTSTR g_szEventName="EventName";

    void Write(char* data){
        
    if(lpMapAddress!=NULL){
            memset(lpMapAddress,
    0,FILE_SIZE);
            sprintf((
    char*)lpMapAddress,"%s",data);
        }

    }


    void Read(){
        
    if(lpMapAddress!=NULL){
            printf(
    "%s\n",lpMapAddress);
        }

    }



    void Process1(){//写数据
    hMapFile = CreateFileMapping(
        INVALID_HANDLE_VALUE,               
    // Current file handle. 
        NULL,                              // Default security. 
        PAGE_READWRITE,                    // Read/write permission. 
        0,                                 // Max. object size. 
        FILE_SIZE,                         // Size of hFile. 
        "MyFileMappingObject");            // Name of mapping object. 
     
    if (hMapFile == NULL) 

        printf(
    "Could not create file-mapping object."); 
        
    return ;
    }
     

    //
    lpMapAddress = MapViewOfFile(hMapFile, // Handle to mapping object. 
        FILE_MAP_ALL_ACCESS,               // Read/write permission 
        0,                                 // Max. object size. 
        0,                                 // Size of hFile. 
        FILE_SIZE);                                // Map entire file. 
     
    if (lpMapAddress == NULL) 

        printf(
    "Could not map view of file."); 
        
    return ;
    }
     
    ::Sleep(
    10000);
    //Write data
    HANDLE hEvent=::OpenEvent(
            EVENT_MODIFY_STATE,
            FALSE,
            g_szEventName);

    while(hEvent!=NULL){
            scanf(
    "%s",lpMapAddress);
            ::SetEvent(hEvent);
    }

    ::CloseHandle(hEvent);
    hEvent
    =INVALID_HANDLE_VALUE;

    }


    void Process2(){//读数据
    hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, // Read/write permission. 
        FALSE,                             // Do not inherit the name
        "MyFileMappingObject");            // of the mapping object. 
     
    if (hMapFile == NULL) 

        printf(
    "Could not open file-mapping object.\n"); 
        
    return;
    }
     
     
    lpMapAddress 
    = MapViewOfFile(hMapFile, // Handle to mapping object. 
        FILE_MAP_ALL_ACCESS,               // Read/write permission. 
        0,                                 // Max. object size. 
        0,                                    // Size of hFile. 
        FILE_SIZE);                                // Map entire file. 
     
    if (lpMapAddress == NULL) 

        printf(
    "Could not map view of file.\n"); 
        
    return;
    }
     

    //Wait for data
    HANDLE hEvent=::CreateEvent(
            NULL,
            TRUE,
            FALSE,
            g_szEventName);

    while(hEvent!=NULL){
            ::WaitForSingleObject(hEvent,INFINITE);
            ::ResetEvent(hEvent);
            ::Read();
        }

    ::CloseHandle(hEvent);
    hEvent
    =INVALID_HANDLE_VALUE;
    }


    void main(){
        
    int flag;
        cin
    >>flag;
        
    if(flag==1){
            Process1();
        }

        
    else if(flag==2){
            Process2();
        }

    }
  • 相关阅读:
    集合 排序 判断元素相等 [MD]
    软键盘 输入法管理器 InputMethodManager
    VideoView 视频播放 示例
    富文本 Htmll类 html标签
    MediaPlayer+SurfaceView 视频播放 示例
    SoundPool 音频播放 详解 示例
    MediaPlayer 音频播放 示例
    Strategy 策略模式 MD
    Chain of Responsibility 责任链模式 [MD]
    Iterator 迭代器模式 [MD]
  • 原文地址:https://www.cnblogs.com/thomas/p/131303.html
Copyright © 2011-2022 走看看