ace是对若干东西的封装,所以从看问题本质的角度来说,了解ACE先要熟悉被它封装的东西。thread管理也是如此。
开辟一个线程在不同的系统上有不同的方法,而且这个线程的代价也不尽一样,但是肯定有些东西是共性的,就譬如ACE做thead_manager的接口的时候定义的那些参数一样,往常复杂不易使用的步骤组合被ACE加以封装。
其实直到目前为止我也一直认为thread manager是为了ace_task服务了。
关于这个类本身,我觉得用代码更容易把问题表达清楚一些:
#include
<
ACE
/
Thread_Manager.h
>
#include < ace / ACE.h >
#pragma comment(lib,"aced.lib")
ACE_THR_FUNC_RETURN svc( void * arg)
... {
int cnt = 1000;
for(int i = 0;i < cnt;++i)
...{
cout<<"now :"<<i<<endl;
}
return NULL;
}
int _tmain( int argc, _TCHAR * argv[])
... {
ACE::init();
ACE_Thread_Manager::instance()->spawn(svc,NULL);
ACE_Thread_Manager::instance()->wait();
ACE::fini();
return 0;
}
#include < ace / ACE.h >
#pragma comment(lib,"aced.lib")
ACE_THR_FUNC_RETURN svc( void * arg)
... {
int cnt = 1000;
for(int i = 0;i < cnt;++i)
...{
cout<<"now :"<<i<<endl;
}
return NULL;
}
int _tmain( int argc, _TCHAR * argv[])
... {
ACE::init();
ACE_Thread_Manager::instance()->spawn(svc,NULL);
ACE_Thread_Manager::instance()->wait();
ACE::fini();
return 0;
}
我在这里帖了很多东西。因为有些东西没有多少人提起,却很重要。
还记得使用的时候要加init和fini吧,如果你认为那只是封装了wsastartup和wsaclearup,那就错了。上边的代码,如果你没有初始化,一样会出问题,而且不给你任何提示,除了系统的报错对话框,而你不知道问题出在哪儿。
帖这段完整代码,提示在使用ace的时候要记得它的特有初始化。