全部博文(330)
分类: C/C++
2010-06-03 21:12:41
我们在前一章中使用ACE_Thread包装时,你一定已经注意到了一些不够"优雅"的地方。那一章中的大多数程序都被分解为函数、而不是对象。这是因为ACE_Thread包装需要一个全局函数名、或是静态方法作为参数。随后该函数(静态方法)就被用作所派生的线程的"启动点"。这自然就使得程序员要为每个线程写一个函数。如我们已经看到的,这可能会导致非面向对象的程序分解。
ACE_Task对常用线程处理进行了OO包装,通过ACE_Task,能对线程进行更好的操作。
要创建任务,需要进行以下步骤:
下面的例子演示怎样去创建任务:
#include "ace/Task.h"
#include
class TaskThread: public ACE_Task
{
public:
virtual int svc(void)
{
for(int i=0;i<10;i++)
{
sleep(1);
cout<
return 0;
}
};
int main()
{
TaskThread task;
task.activate();
while(true)
sleep(5);//如果没有while循环,这里的5意思是只有5秒给svc来执行
return 0;
}
ACE_Task也封装了常用线程操作,如暂停,恢复及停止等,是不是非常简单和方便呢。
其实ACE_Task的使用还不仅仅是这些,通过它还可实现一种很常用的网络编程模式--主动对象模式,其具体功能在后续的设计模式部分将作详细的介绍。
在用gdb调试过程中发现是开了两个线程,一个主,一个给svc()。在调试无多线程的程序中,没有发现有多线程的信息。