找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3682|回复: 4

为什么提示ACE_Local_Mutex未定义?

[复制链接]
发表于 2009-11-10 00:12:22 | 显示全部楼层 |阅读模式
为什么提示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_[deviceID]->acquire();
         Device *currDevice = devices_[deviceID];
         internalDo(currDevice);
         token_[deviceID]->release();
         return 0;
    }

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

private:
    Device *devices_[N_DEVICES];
    ACE_Local_Mutex *token_[N_DEVICES];
};

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 编辑 ]
发表于 2009-11-10 15:04:14 | 显示全部楼层
链接报错?可能是ace没编译全
 楼主| 发表于 2009-11-10 23:17:30 | 显示全部楼层

回复 #2 wishel 的帖子

ACE的编译我是根据ACE官方网站上的介绍,按照上面的步骤去编译的!
编译阶段就报错了,Local_Tokens.h中是声明了,而且Local_Tokens.cpp中确实有定义。
因该是这个宏(ACE_HAS_TOKENS_LIBRARY)引起的,不知道,这个宏在那里定义了?
发表于 2010-1-4 16:37:52 | 显示全部楼层
默认ACE是不编译Token和Local_Mutex的。
需要修改config.h(好像是,记不清了),加入该宏,然后重新编译。
发表于 2010-1-7 15:11:45 | 显示全部楼层
去ACE中搜,查字符,查不到就是没有;  这是源码的;

换个ACE版本再试试
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 13:54 , Processed in 0.022438 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表