peakzhang 发表于 2008-1-17 18:40:14

求教 ACE EXAMPLE 编译无法通过

我在VC 2003下编译无法通过 说ACE_SHARED_MEMORY_POOL 找不到。求教
感激不尽

#include "stdafx.h"
#include "ace/Shared_Memory_MM.h"
#include "ace/Shared_Memory_Pool.h"
#include "ace/Malloc.h"
#include "ace/Malloc_T.h"
#include "ace/Memory_Pool.h"
#include "ace/Malloc.h"
#include "ace/LOG_MSG.H"
#include "ace/Synch.h"
#include "ace/Thread.h"
#define DATA_SIZE 100
#define MESSAGE1 "Hiya over there client process"
#define MESSAGE2"Did you hear me the first time?"
LPCTSTR poolname="My_Pool";
typedef ACE_Malloc<ACE_SHARED_MEMORY_POOL,ACE_Null_Mutex> Malloc_Allocator;
static void server (void){
    //Create the memory allocator passing it the shared memory
    //pool that you want to use
    Malloc_Allocator shm_allocator(poolname);
    //Create a message, allocate memory for it and bind it with
    //a name so that the client can the find it in the memory
    //pool
    char* Message1=(char*)shm_allocator.malloc(strlen(MESSAGE1));
    ACE_OS::strcpy(Message1,MESSAGE1);
    shm_allocator.bind("FirstMessage",Message1);
    ACE_DEBUG((LM_DEBUG,"<<%s\n",Message1));
    //How about a second message
    char* Message2=(char*)shm_allocator.malloc(strlen(MESSAGE2));
    ACE_OS::strcpy(Message2,MESSAGE2);
    shm_allocator.bind("SecondMessage",Message2);
    ACE_DEBUG((LM_DEBUG,"<<%s\n",Message2));
    //Set the Server to go to sleep for a while so that the client has
    //a chance to do its stuff
    ACE_DEBUG((LM_DEBUG,
      "Server done writing.. going to sleep zzz..\n\n\n"));
    ACE_OS::sleep(2);
    //Get rid of all resources allocated by the server. In other
    //words get rid of the shared memory pool that had been
    //previously allocated
    shm_allocator.remove();
}

static void client(void){
    //Create a memory allocator. Be sure that the client passes
    // in the "right" name here so that both the client and the
    //server use the same memory pool. We wouldnt want them to
    // BOTH create different underlying pools.
    Malloc_Allocator shm_allocator(poolname);
    //Lets get that first message. Notice that the find is looking up the
    //memory based on the "name" that was bound to it by the server.
    void *Message1;
    if(shm_allocator.find("FirstMessage",Message1)==-1){
      ACE_ERROR((LM_ERROR,
            "Client: Problem cant find data that server has sent\n"));
      ACE_OS::exit(1);
    }
    ACE_OS::printf(">>%s\n",(char*) Message1);
    ACE_OS::fflush(stdout);
    //Lets get that second message now.
    void *Message2;
    if(shm_allocator.find("SecondMessage",Message2)==-1){
      ACE_ERROR((LM_ERROR,"Client: Problem cant find data that server has sent\n"));
      ACE_OS::exit(1);
    }
    ACE_OS::printf(">>%s\n",(char*)Message2);
    ACE_OS::fflush(stdout);
    ACE_DEBUG((LM_DEBUG,"Client done reading! BYE NOW\n"));
    ACE_OS::fflush(stdout);
}

int main (int, char *[]){
    switch (ACE_OS::fork ())
    {
    case -1:
      ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "fork"), 1);
    case 0:
      // Make sure the server starts up first.
      ACE_OS::sleep (1);
      client ();
      break;
    default:
      server ();
      break;
    }
    return 0;
}

peakzhang 发表于 2008-1-17 18:40:21

加入以下头文件

#include "ace/Null_Mutex.h"
#include"ace/MMAP_Memory_Pool.h"

example错误还真是多
页: [1]
查看完整版本: 求教 ACE EXAMPLE 编译无法通过