这几天把c++网络编程随便翻了一遍,发现写ace程序太难了。
比如线程的创建,遇到这样一个问题一直没有解决:
#include <ace/Thread_Manager.h>
#include <ace/Get_Opt.h>
#include <ace/OS.h>
static ACE_THR_FUNC_RETURN taskone(void*)
{
ACE_DEBUG((LM_DEBUG,"Thread:(%t)started Task one! /n"));
ACE_OS::sleep(2);
ACE_DEBUG((LM_DEBUG,"Thread:(%t)finished Task one!/n"));
return 0;
}
static ACE_THR_FUNC_RETURN tasktwo(void*)
{
ACE_DEBUG((LM_DEBUG,"Thread:(%t)started Task two!/n"));
ACE_OS::sleep(1);
ACE_DEBUG((LM_DEBUG,"Thread:(%t)finished Task two!/n"));
return 0;
}
int wmain()
{
ACE_Thread_Manager::instance()->spawn(taskone,0);
ACE_Thread_Manager::instance()->spawn(tasktwo,0);
ACE_OS::sleep(10);
return 0;
}
死活搞不清这段程序为什么会引起程序崩溃。
想一想还是boost的线程比较简单灵活,但是没有ace的这么强大
后来才发现少了ACE::init();
int wmain()
{
ACE::init();
ACE_Thread_Manager::instance()->spawn(taskone,0);
ACE_Thread_Manager::instance()->spawn(tasktwo,0);
ACE_OS::sleep(10);
ACE::fini();
return 0;
}
本文探讨了使用ACE库进行线程创建的过程,并针对一个具体的示例程序进行了详细解析。作者最初遇到程序崩溃的问题,经过排查发现是因为缺少了ACE库初始化步骤。通过添加ACE::init()和ACE::fini()调用解决了问题。
4512

被折叠的 条评论
为什么被折叠?



