|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 3 f& p7 b8 R2 V) q9 f% ]
/ x& q8 i; M0 @* X8 T: f4 r( U
忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;+ [1 U* @. J# F/ V
7 `1 K. R1 ?2 A0 F9 K2 _3 ] v
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
1 q5 l8 x, c% n9 A7 e
# U8 N* b9 J" z& q4 |; { @2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
4 {1 n1 ?8 ^! `, V! streenode Queue3 = centerobject(centerobject(current,1),1);* D4 \7 {: H- m( g: K
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
6 h6 E3 k* V: o9 [- e5 minserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);
8 i ^9 U* J: @% n' w8 Z4 N/ k( f意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
/ k% c/ |+ t2 Z! a
8 q. | c* a6 ~$ e3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
2 c1 q% C" s" c- E
0 C2 l( z1 X( E9 T% c1 Q7 @/ J4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
6 Q- S# z" _ \$ m3 f6 b. atreenode oldtask = gettasksequence(centerobject(current,1),1);
2 t/ V" }2 o& }+ Gdestroyobject(oldtask);0 T2 A' g8 J" t& S' A
/ Z" U4 n! i5 l2 ^! c—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|