活动对象为什么不活动了?

edd 2008-04-14 05:28:32
void aaa::RunL( )
{
LOG(_L("RunL"));
iSendingSocket.Read (data, iStatus );
SetActive();
LOG(_L("fffff"));
}

iSendingSocket变量是这样申明的。
RSocket iSendingSocket;

但执行一次runl之后,再也不执行了。

如果代码改成这样
void aaa::RunL( )
{
iTimer.After(iStatus, 2000000);
ipGps->Init();
SetActive();
}
runl就会反复的执行,这是为什么?
...全文
103 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharetop 2008-04-15
  • 打赏
  • 举报
回复
应该说:只有让read真正改变了iStatus的值才能让AO继续执行。AO能否继续执行的条件看两个:一是iStatus是否挂起,二是看是否Active。
edd 2008-04-15
  • 打赏
  • 举报
回复
但这一段。
void aaa::RunL( )
{
LOG(_L("RunL"));
iSendingSocket.Read (data, iStatus );
SetActive();
LOG(_L("fffff"));
}
难道是因为read改变了iStatus状态,所以活动对象才停止活动了?我试验下。
lspo816 2008-04-14
  • 打赏
  • 举报
回复
每一个活动服务对象都有一个iStatus来标识当前对象的状态,iStatus发生改变,这个时候活动规划器会收到这个状态的改变,从而调用相应活动对象的处理函数,也就是RunL函数.
iTimer.After(iStatus, 2000000); 就会改变iStatus的状态
edd 2008-04-14
  • 打赏
  • 举报
回复
read是一个异步函数吧。不应该会卡住阿。
ptclin_2007 2008-04-14
  • 打赏
  • 举报
回复
会不会是网络连接问题
edd 2008-04-14
  • 打赏
  • 举报
回复
发错,是改成这样活动对象的runl就会被反复调用
void aaa::RunL( )
{
iTimer.After(iStatus, 2000000);
SetActive();
}

真奇怪了,为什么read一下之后活动对象就不活动了?

3,120

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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