pengxiqin 发表于 2009-11-10 00:12:22

为什么提示ACE_Local_Mutex未定义?

为什么提示ACE_Local_Mutex未定义?是操作系统不支持吗?
在windows xp下用vc++2003编译,代码如下:

#include "ace\Task.h"
#include "ace\Synch.h"
#include "ace\Thread.h"
#include "ace\Log_Msg.h"
#include "ace\OS.h"
#include "ace\Token.h"
#include "ace\Local_Tokens.h"

typedef struct device
{
   int   id;
}Device;

class DeviceRepository
{
public:
    enum { N_DEVICES = 100 };
    DeviceRepository()
    {
      for( int i = 0; i < N_DEVICES; i++ )
      {
            token_   = new ACE_Local_Mutex( 0, 0, 1 );
            devices_ = new Device;
            devices_->id =i;
      }
    }

    ~DeviceRepository()
    {
      for( int i = 0; i < N_DEVICES; i++ )
      {
            delete token_;
         }
    }

    int updateDevice( int deviceID, char *commands )
    {
         ACE_DEBUG((LM_DEBUG, "Update Device %d\n", deviceID));
         token_->acquire();
         Device *currDevice = devices_;
         internalDo(currDevice);
         token_->release();
         return 0;
    }

    void internalDo( Device *d )
    {
      ACE_OS::sleep(1);
    }

private:
    Device *devices_;
    ACE_Local_Mutex *token_;
};

class CommandHandler : public ACE_Task< ACE_MT_SYNCH >
{
public:
    enum{ N_THREADS = 5 };
    CommandHandler( DeviceRepository &dr )
      :dr_(dr)
    {
    }

    virtual int svc(void)
    {
      for (int i = 0; i < DeviceRepository::N_DEVICES; i++)
      {
            dr_.updateDevice( i, "" );
      }
    }

private:
    DeviceRepository &dr_;
};

int main( int argc, char *argv[] )
{
    ACE_UNUSED_ARG( argc );
    ACE_UNUSED_ARG( argv );

    DeviceRepository dr;
    CommandHandler ch( dr );
    ch.activate( THR_NEW_LWP | THR_JOINABLE, CommandHandler::N_THREADS );
    ch.wait();

    return 0;
}

[ 本帖最后由 pengxiqin 于 2009-11-10 00:13 编辑 ]

wishel 发表于 2009-11-10 15:04:14

链接报错?可能是ace没编译全

pengxiqin 发表于 2009-11-10 23:17:30

回复 #2 wishel 的帖子

ACE的编译我是根据ACE官方网站上的介绍,按照上面的步骤去编译的!
编译阶段就报错了,Local_Tokens.h中是声明了,而且Local_Tokens.cpp中确实有定义。
因该是这个宏(ACE_HAS_TOKENS_LIBRARY)引起的,不知道,这个宏在那里定义了?

codecola 发表于 2010-1-4 16:37:52

默认ACE是不编译Token和Local_Mutex的。
需要修改config.h(好像是,记不清了),加入该宏,然后重新编译。

xtdwnuisea 发表于 2010-1-7 15:11:45

去ACE中搜,查字符,查不到就是没有;这是源码的;

换个ACE版本再试试
页: [1]
查看完整版本: 为什么提示ACE_Local_Mutex未定义?