|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑
8 Y* w5 w& q; |2 p2 Q% }
: l. x6 e% ?. o5 k忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;; s. n l- E k: p* H$ v
- T3 U/ ]- |! C& E, e. ?$ H
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,2 a; V' o! s/ W0 j3 A
( z% }" R% H- u- n( A
2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:0 Z6 J' _' w: i3 a9 u/ E/ A& l' t
treenode Queue3 = centerobject(centerobject(current,1),1);8 B* W9 R! ^4 Z
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
! r o/ @4 t& E, W, r0 N0 P9 Vinserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);+ m7 O% t, Z, Z( H4 U7 |' h
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;; @1 k% E& E" [, }! t
9 N6 u7 p( ?) J. ~1 @0 Y
3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;" E6 Z# j5 ?, ?, ~1 a
2 v: s6 U2 b: k/ p- S' R4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
; }, E7 c; g3 [ _) }treenode oldtask = gettasksequence(centerobject(current,1),1);
- X0 f; G Y* D) jdestroyobject(oldtask);) Z9 A& o2 A1 y& m
3 ^* v: c% F" r1 v' x—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|