为什么提示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 编辑 ] 链接报错?可能是ace没编译全
回复 #2 wishel 的帖子
ACE的编译我是根据ACE官方网站上的介绍,按照上面的步骤去编译的!编译阶段就报错了,Local_Tokens.h中是声明了,而且Local_Tokens.cpp中确实有定义。
因该是这个宏(ACE_HAS_TOKENS_LIBRARY)引起的,不知道,这个宏在那里定义了? 默认ACE是不编译Token和Local_Mutex的。
需要修改config.h(好像是,记不清了),加入该宏,然后重新编译。 去ACE中搜,查字符,查不到就是没有;这是源码的;
换个ACE版本再试试
页:
[1]