ACE_Async_Connector::connect 调用后有时无法完成,求助

flb029 2012-04-06 10:58:33
连续执行以下代码生成的exe,会发现程序有时无法退出,不在为什么,环境:window7, vc2010, ACE6.0.0/ACE6.1.0,求大虾指教。

int ACE_TMAIN(int argc, ACE_TCHAR* argv[])
{
CAceConnector::DoWork();
}

class CSvcHandler:public ACE_Service_Handler
{
public:
virtual void open(ACE_HANDLE new_handle, ACE_Message_Block &message_block);
};

class CConnector: public ACE_Asynch_Connector<CSvcHandler>
{
protected:
int counter_; //计数机
int successCounter_;
public:
CConnector():counter_(0),successCounter_(0){}
virtual int validate_connection(const ACE_Asynch_Connect::Result& result, const ACE_INET_Addr &remote, const ACE_INET_Addr& local);
};

class CAceConnector:public ACE_Task_Base
{
public:
static void DoWork();

protected:
ACE_INET_Addr add_;
CConnector connector_;

public:
CAceConnector(void);
~CAceConnector(void);

bool Init();
virtual int svc();
};

#define EXECUTE_TIMES 3000

CAceConnector::CAceConnector(void)
{
}


CAceConnector::~CAceConnector(void)
{
}

void CSvcHandler::open(ACE_HANDLE new_handle, ACE_Message_Block &message_block)
{
MY_INFO("Hello");
}


int CConnector::validate_connection(const ACE_Asynch_Connect::Result& result, const ACE_INET_Addr &remote, const ACE_INET_Addr& local)
{
counter_++;
ACE_DEBUG((LM_INFO,"(%t)counter=%d status=%d \n",counter_,result.success()));

if(result.success())
{
this->successCounter_++;
//ACE_OS::shutdown(result.connect_handle(),ACE_SHUTDOWN_BOTH);
//ACE_OS::closesocket(result.connect_handle());
}

if(counter_>=EXECUTE_TIMES)
{
ACE_Proactor::instance()->proactor_end_event_loop();
ACE_DEBUG((LM_INFO,"execute complete: success %d \n",this->successCounter_));
}

return 0;

}

bool CAceConnector::Init()
{
ACE_TRACE(__FUNCTION__);
add_.set("192.168.1.66:4001");
if(this->activate()!=0)
{
ACE_ERROR((LM_ERROR,"%p","Thread start failed:"));
return false;
}

connector_.open();
for(int i=0;i<EXECUTE_TIMES;i++)
{
if(connector_.connect(add_)==-1)
{
ACE_ERROR((LM_ERROR,"%p","connect server failed:"));
ACE_Proactor::instance()->proactor_end_event_loop();
return false;
}
}

return true;
}

int CAceConnector::svc()
{
MY_INFO("(%t)....");
ACE_Proactor::instance()->proactor_run_event_loop();
return 0;
}

void CAceConnector::DoWork()
{
MY_INFO("(%t) main thread start...");
CAceConnector *lpconnectThread=new CAceConnector();

if(lpconnectThread->Init())
{
MY_INFO("(%t) init success.");
}
lpconnectThread->wait();
MY_INFO("(%t) main thread exit...");
delete lpconnectThread;
}
...全文
181 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
flb029 2012-04-06
  • 打赏
  • 举报
回复
求助......................

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧