找回密码
 用户注册

QQ登录

只需一步,快速开始

楼主: peakzhang

Proactor 自带例子 问题

[复制链接]
发表于 2008-8-3 23:26:00 | 显示全部楼层
int ACE_TMAIN (int argc, ACE_TCHAR *argv []) {
  ACE_Proactor::instance ();
  ACE_Thread_Manager::instance ()->wait ();
  return 0;
}
这个跑不完

int ACE_TMAIN (int argc, ACE_TCHAR *argv []) {
  ACE_Thread_Manager::instance ()->wait ();
  return 0;
}
这个就能跑完
你说有没有冲突?
这么简单的程序还说我用法不对头?我根本就没用那个proactor,就是产生了一个singleton的实例而已
发表于 2008-8-3 23:32:57 | 显示全部楼层
或者把proactor换成reactor
int ACE_TMAIN (int argc, ACE_TCHAR *argv [])
{
  ACE_Reactor::instance ();
  ACE_Thread_Manager::instance ()->wait ();
  return 0;
}
也能顺利跑完,可以确定是一个bug
产生一个proactor的singleton实例(第一次用所以新产生),不应该产生任何新线程,更不应该让ACE_Thread_Manager::instance ()->wait ()阻塞,这是不符合proactor的语义的。
发表于 2008-8-4 12:04:10 | 显示全部楼层
int ACE_TMAIN (int argc, ACE_TCHAR *argv [])
{
  ACE_WIN32_Proactor win32_proactor (0, 0); //win32下的缺省ACE_Proactor_Impl
  ACE_Thread_Manager::instance ()->wait ();

  //can not reach here!!!
  return 0;
}
也不行,我这边没有unix环境,不知道其他的imp行不行

[ 本帖最后由 wishel 于 2008-8-4 12:05 编辑 ]
发表于 2008-8-4 12:37:10 | 显示全部楼层
你先搞明白:ACE_Thread_Manager::instance ()->wait ();
是什么意思,再来问大家。
其实ACE_Thread_Manager::instance ()一般用wait_task功能。wait是等所有线程退出。
如:
tm->wait_task (&m_task_obj);
发表于 2008-8-4 12:48:57 | 显示全部楼层
晕。。我不是在问大家,我是在回答楼主问题
恰恰是你没搞明白ACE_Thread_Manager::instance ()->wait ()是什么意思
建议你再去看书,C++NPv1 p189(英文版),表里说的很明白了

还有在examples\Reactor\Proactor下面还有一个测试程序test_multiple_loops.cpp,有同样的问题,最后一行romove是执行不到的
发表于 2008-8-4 12:50:39 | 显示全部楼层
作为版主回答问题要负责任,这么简单的问题,自己亲自调一下就很明白,这个程序很简单也花不了几分钟时间。然后再来回答网友提问,特别是有争议的情况下。
发表于 2008-8-4 13:30:50 | 显示全部楼层
谢谢批评。
版主不是神,也没义务做那么多FREE的事情。大家只是交流和沟通而已。
此贴是旧帖“翻新”,我理解有误,不好意思。你的回答是正确的。最好不要用wait,我也是用task代替。
用wait,必须有外面的中断措施。
发表于 2008-8-4 20:01:53 | 显示全部楼层
抱歉我说的重了点,版主辛苦了,希望以后多交流经验。
发表于 2008-9-16 16:23:51 | 显示全部楼层
我也碰到了,我觉得是ACE_WIN32_Proactor构造函数中this->get_asynch_pseudo_task ().start (); 这一句派生了一个线程,异步connect用的。这个线程在ACE_WIN32_Proactor析构函数中会终止,所以只需要等待运行proactor循环的线程。
ACE_Thread_Manager::instance ()->join(t_id), t_id是spwan的返回值。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-4-30 09:31 , Processed in 0.012980 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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