找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4993|回复: 6

关于ACE定时器问题,帮忙看看

[复制链接]
发表于 2009-3-26 11:12:23 | 显示全部楼层 |阅读模式
#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)

在网上找了, 但没有找到相应的解决办法, 各位老大能帮我看下是啥原因不.
发表于 2009-3-26 13:01:13 | 显示全部楼层
从你给的代码,一下子也很难分析出来什么。

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

如果还是没解决的话,挨行注释掉代码,
直到没有这个错误了,你就知道是哪里出的问题了。
 楼主| 发表于 2009-3-26 14:14:09 | 显示全部楼层
这个工程设置是没有问题的, 我用它已经测试了好几个例子.

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

ActiveTimer atimer;

atimer.activate();

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

不知道这两行代码这样使用有何不对
发表于 2009-3-26 16:27:31 | 显示全部楼层
应该还是你工程的配置问题吧,
我把你代码(不做任何修改)直接拷贝到我自己的工程里,
没有任何问题的。。
 楼主| 发表于 2009-3-27 09:47:33 | 显示全部楼层
不会吧, 我在这个工程目录下面已经写了很多测试代码都没有问题啊.

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

你用的是什么版本?

能不能把你的工程配置给我说一下
 楼主| 发表于 2009-3-27 10:21:50 | 显示全部楼层
靠, 我把这个程序移植到vs2008工程目录下面, 就没问题了, 估计是ACE版本引起的.

谢谢大家了
发表于 2009-3-27 11:24:38 | 显示全部楼层
有可能是配置问题,我用的是vs2005+ace5.6,
不过印象里5.5版本是支持vc6的,
建议还是用高版本的vs吧,5.6已经不支持vc6了。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-23 03:28 , Processed in 0.026076 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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