Gengoo 发表于 2009-3-26 11:12:23

关于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)

在网上找了, 但没有找到相应的解决办法, 各位老大能帮我看下是啥原因不.

modern 发表于 2009-3-26 13:01:13

从你给的代码,一下子也很难分析出来什么。

首先检查一下你工程设置是否正确吧,
找一个你之前测试时没有类似错误的对比一下先。

如果还是没解决的话,挨行注释掉代码,
直到没有这个错误了,你就知道是哪里出的问题了。

Gengoo 发表于 2009-3-26 14:14:09

这个工程设置是没有问题的, 我用它已经测试了好几个例子.

错误的行数也知道, 就是:

ActiveTimer atimer;

atimer.activate();

如果把这两行注释掉就不会报上面的错, 而且能够执行.

不知道这两行代码这样使用有何不对

modern 发表于 2009-3-26 16:27:31

应该还是你工程的配置问题吧,
我把你代码(不做任何修改)直接拷贝到我自己的工程里,
没有任何问题的。。

Gengoo 发表于 2009-3-27 09:47:33

不会吧, 我在这个工程目录下面已经写了很多测试代码都没有问题啊.

我用的是vc6.0+ACE5.5,

你用的是什么版本?

能不能把你的工程配置给我说一下

Gengoo 发表于 2009-3-27 10:21:50

靠, 我把这个程序移植到vs2008工程目录下面, 就没问题了, 估计是ACE版本引起的.

谢谢大家了

modern 发表于 2009-3-27 11:24:38

有可能是配置问题,我用的是vs2005+ace5.6,
不过印象里5.5版本是支持vc6的,
建议还是用高版本的vs吧,5.6已经不支持vc6了。
页: [1]
查看完整版本: 关于ACE定时器问题,帮忙看看