找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5538|回复: 2

ACE程序员教程 中的两个例子

[复制链接]
发表于 2010-3-24 22:14:23 | 显示全部楼层 |阅读模式
这是ACE程序员教程中 6.6通知的两个例子,为什么以下代码没有进行回调?请各位帮帮小弟
程序一:
#include "stdafx.h"
#include "ace/OS.h"
#include "ace/log_msg.h"
#include "ace/Reactor.h"
#include "ace/Event_Handler.h"
#include "ace/Synch_T.h"
#include "ace/Thread_Manager.h"
#pragma comment (lib,"ACEd.lib")
#define WAIT_TIME 1
#define SLEEP_TIME 2

class My_Handler:public ACE_Event_Handler
{
private:
        static int no;
public:
        My_Handler()
        {
                ACE_DEBUG((LM_DEBUG,"Event Handler created\n"));
                //设置Reactor迭代次数为5次,即处理5次完该消息,则退出
                ACE_Reactor::instance()->max_notify_iterations(5);
        }
        void perform_notifications()
        {
                for(int i=0;i<10;i++)
                        ACE_Reactor::instance()->notify(this,ACE_Event_Handler::READ_MASK);
        }
        int handle_input(int)
        {
                ACE_DEBUG((LM_DEBUG,"Got notification # %d\n",no));
                no++;
                return 0;
        }
};

int My_Handler::no=1;

int main(int argc, char* argv[])
{
        ACE_DEBUG((LM_DEBUG,"Starting test\n"));
        My_Handler handler;
        int done=0;
        while (1)
        {
                ACE_Reactor::instance()->handle_events(ACE_Time_Value(WAIT_TIME));
       
                if (!done)
                {
                        handler.perform_notifications();
                        done=1;
                }
                ACE_OS::sleep(SLEEP_TIME);
        }
}




程序二:
#include "stdafx.h"
#include "ace/OS.h"
#include "ace/log_msg.h"
#include "ace/Reactor.h"
#include "ace/Event_Handler.h"
#include "ace/Synch_T.h"
#include "ace/Thread_Manager.h"
#pragma comment (lib,"ACEd.lib")
class My_Handler:public ACE_Event_Handler
{
private:
        static int no;
public:
        My_Handler()
        {
                ACE_DEBUG((LM_DEBUG,"Got open\n"));
                activate_threads();
                ACE_Reactor::instance()->max_notify_iterations(5);
        }
        void activate_threads()
        {
                ACE_Thread_Manager::instance()->spawn((ACE_THR_FUNC)svc_start,(void*)this);
        }

        void svc()
        {
                for (int i=0;i<10;i++)
                {
                        ACE_Reactor::instance()->notify(this,ACE_Event_Handler::READ_MASK);
                }
        }

        int handle_input(int)
        {
                ACE_DEBUG((LM_DEBUG,"Got notification"));
                no++;
                return 0;
        }
        static int svc_start(void* arg);
};
int My_Handler::no=1;
int My_Handler::svc_start(void* arg)
{
        My_Handler *eh=(My_Handler*)arg;
        eh->svc();
        return -1;
}

int main(int argc, char* argv[])
{
        ACE_DEBUG((LM_DEBUG,"Starting test \n"));
        My_Handler handler;

        while(1)
        {
                ACE_Reactor::instance()->handle_events();
                ACE_OS::sleep(3);
        }
        return 0;
}
发表于 2010-3-25 10:22:09 | 显示全部楼层
简单看了下
似乎是  int handle_input(int) 函数写错了,这样把原来的给覆盖了
应该是  int handle_input(ACE_HANDLE)
 楼主| 发表于 2010-3-25 12:56:40 | 显示全部楼层

回复 #2 archxm 的帖子

还确实是这样的,谢谢了!教材上面也写错了。。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-22 12:04 , Processed in 0.023800 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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