ACE_Task 正常退出及其他
2013-03-28 03:25
127 查看
1.ACE_Task封装了任务,每个任务都含有一或多个线程,以及一个底层消息队列。各个任务通过这些消息队列进行通信。
其主要成员如下:
open():初始化资源
close():释放资源
activate():启动线程,可指定线程的数目
svc():线程的启动位置
putq():放置消息到任务的消息队列中
getq():从任务的消息队列中取出消息
thr_count():返回任务中线程的数目
last_thread():返回任务中将线程计数器从1降为0的线程的ID
备注:任务执行完svc()之后,自动执行close()
2. Task_Demo
class Task_Demo : public ACE_Task<ACE_MT_SYNCH>
{
public:
virtual int open (void *args = 0)
{
activate( THR_NEW_LWP, 1 );
return 0;
}
virtual int close (u_long flags = 0)
{
if ( ACE_OS::thr_equal ( ACE_Thread::self (), this->last_thread () ) )
{
//释放对象
delete this;
}
return 0;
}
virtual int svc (void)
{
return 0;
}
};
3. 正常退出:
通常实现svc()的时候,往往如下
while( 1 )
{
//do something
}
可以作类似如下
while( 1 )
{
//do something
ACE_Time_Value tvTmp = ACE_OS::gettimeofday();
tvTmp += ACE_Time_Value(1); //1秒,时间值可根据实际需求设置
getq(X, &tvTmp); //注意,如果不设置超时,如果之前没有putq,此处会阻塞!
if (X != NULL)
{
break;
}
}
然后在退出前putq一个消息,就OK了 (本人疑问:这么做感觉还不如用事件来的直接些 )
其主要成员如下:
open():初始化资源
close():释放资源
activate():启动线程,可指定线程的数目
svc():线程的启动位置
putq():放置消息到任务的消息队列中
getq():从任务的消息队列中取出消息
thr_count():返回任务中线程的数目
last_thread():返回任务中将线程计数器从1降为0的线程的ID
备注:任务执行完svc()之后,自动执行close()
2. Task_Demo
class Task_Demo : public ACE_Task<ACE_MT_SYNCH>
{
public:
virtual int open (void *args = 0)
{
activate( THR_NEW_LWP, 1 );
return 0;
}
virtual int close (u_long flags = 0)
{
if ( ACE_OS::thr_equal ( ACE_Thread::self (), this->last_thread () ) )
{
//释放对象
delete this;
}
return 0;
}
virtual int svc (void)
{
return 0;
}
};
3. 正常退出:
通常实现svc()的时候,往往如下
while( 1 )
{
//do something
}
可以作类似如下
while( 1 )
{
//do something
ACE_Time_Value tvTmp = ACE_OS::gettimeofday();
tvTmp += ACE_Time_Value(1); //1秒,时间值可根据实际需求设置
getq(X, &tvTmp); //注意,如果不设置超时,如果之前没有putq,此处会阻塞!
if (X != NULL)
{
break;
}
}
然后在退出前putq一个消息,就OK了 (本人疑问:这么做感觉还不如用事件来的直接些 )
相关文章推荐
- 解决ACE_Proactor中psudo_task不能正常结束的问题
- ACE_Task自然退出的问题
- Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
- java获取当前浏览器及IE浏览器乱码其他浏览器正常解决方案
- 利用ace的ACE_Task等类实现线程池
- ACE线程管理---ACE_Task_Base
- MacBook的浏览器无法连接到服务器,其他应用可以正常使用的解决办法
- Extjs 使用form上传文件,在IE8出现乱码,但是其他浏览器可以正常解读
- VIM不正常退出产生的swp文件
- 局域一台打印机突然链接失败,其他能正常连接打印服务器。
- ace 实现的线程池,可以用ACE_Task_Base,ACE_Task,ACE_Svc_Handler作为工作者
- Eclipse 未正常退出,导致进不去的问题
- android 7.0 使用 webview 访问 https 协议的网址,界面显示空白,其他android版本正常。
- ACE笔记(5)-ACE_Reactor 机制下的其他事件触发器
- 管道连接异常 --- 另主线程退出了,其他线程仍在转,导致进程不退出。
- Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
- 苹果系统中有些程序无法强制退出导致无法正常关机怎么办?
- 双击打开word很慢,当其他方式打开word则正常
- ANDROID INTENT.FLAG_NEW_TASK详解,包括其他的标记的一些解释