|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑
1 P H4 N3 s: C; ~/ G K% h
9 P/ a' m' s6 [4 U/ X* L, t6 z忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;
$ {7 o6 E4 q7 a; Q
) l" }- L# S( r3 f, f$ Z' L( z& l; ]1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,- G% ~/ Z. V0 b
6 j+ v/ _, I) a' n2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
& Y( Z8 }( J/ ~; l H# T) v5 `, k: Ltreenode Queue3 = centerobject(centerobject(current,1),1);
- ~( S& w8 e: S0 h5 O pinserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);" C5 y) g y8 [. S
inserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);
/ u1 L$ N4 z% p+ P# }3 d4 m3 ~意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
) f% T# q; v7 }8 N! {
/ \; @4 \. a' ~+ S+ J0 y3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;: S+ f7 x5 q% K) ^
- y ?3 U2 ?+ \' H y# D1 G! ]4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
N) E7 w( R1 I+ `7 k3 E; l5 K) ktreenode oldtask = gettasksequence(centerobject(current,1),1);
/ _1 B3 [: U7 P Cdestroyobject(oldtask);% V; S# m3 Y# _6 ~& n3 O* i F: P2 M8 P
, U1 y6 v( ]0 \7 j
—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|