关于ACE定时器问题,帮忙看看
#include "ace/Time_Value.h"#include "ace/Log_Msg.h"
#include "ace/Synch.h"
#include "ace/Reactor.h"
#include "ace/Event_Handler.h"
#include "ace/Timer_Queue_Adapters.h"
#include "ace/Timer_Heap.h"
#include "ace/Timer_Wheel.h"
#include "ace/Thread_Manager.h"
typedef ACE_Thread_Timer_Queue_Adapter <ACE_Timer_Heap> ActiveTimer;
class CBA : public ACE_Event_Handler
{
public:
CBA (int id) : id_(id)
{
}
virtual int handle_timeout (const ACE_Time_Value &, const void *arg)
{
ACE_TRACE (ACE_TEXT ("CB::handle_timeout"));
const int *val = ACE_static_cast (const int *, arg);
ACE_ASSERT ((*val) == id_);
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Expiry handled by thread %d\n")));
return 0;
}
private:
int id_;
};
int ACE_TMAIN (int, ACE_TCHAR *[])
{
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("The main thread %t has started\n")));
ActiveTimer atimer;
atimer.activate();
CBA cb1(1);
int arg1 = 1;
const ACE_Time_Value curr_tv = ACE_OS::gettimeofday();
ACE_Time_Value interval = ACE_Time_Value (1, 1000);
long tid1 = atimer.schedule(&cb1, &arg1, curr_tv + ACE_Time_Value(3L), interval);
ACE_Thread_Manager::instance()->wait();
return 0;
};
上面是一个ACE定时器例子, 我编译的时候总是报如下错误:
--------------------Configuration: Test - Win32 Debug--------------------
Compiling...
Timer.cpp
Linking...
Timer.obj : error LNK2001: unresolved external symbol "unsigned long ACE_OS::NULL_thread" (?NULL_thread@ACE_OS@@3KA)
Debug/Test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Test.exe - 2 error(s), 0 warning(s)
在网上找了, 但没有找到相应的解决办法, 各位老大能帮我看下是啥原因不. 从你给的代码,一下子也很难分析出来什么。
首先检查一下你工程设置是否正确吧,
找一个你之前测试时没有类似错误的对比一下先。
如果还是没解决的话,挨行注释掉代码,
直到没有这个错误了,你就知道是哪里出的问题了。 这个工程设置是没有问题的, 我用它已经测试了好几个例子.
错误的行数也知道, 就是:
ActiveTimer atimer;
atimer.activate();
如果把这两行注释掉就不会报上面的错, 而且能够执行.
不知道这两行代码这样使用有何不对 应该还是你工程的配置问题吧,
我把你代码(不做任何修改)直接拷贝到我自己的工程里,
没有任何问题的。。 不会吧, 我在这个工程目录下面已经写了很多测试代码都没有问题啊.
我用的是vc6.0+ACE5.5,
你用的是什么版本?
能不能把你的工程配置给我说一下 靠, 我把这个程序移植到vs2008工程目录下面, 就没问题了, 估计是ACE版本引起的.
谢谢大家了 有可能是配置问题,我用的是vs2005+ace5.6,
不过印象里5.5版本是支持vc6的,
建议还是用高版本的vs吧,5.6已经不支持vc6了。
页:
[1]