|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 $ ~: J9 n5 \/ v8 R& X
- E# l& N, j& {1 m) s
忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;; s: f4 a! Y* s6 S5 H
* r! S& Y& z' ?! F
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
; y/ a+ H+ d: j0 F
6 i3 N% R* Z) x2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
+ U, u# h4 Z1 ^. g, v7 rtreenode Queue3 = centerobject(centerobject(current,1),1);
0 ?8 o0 `* P( M3 u) \+ `/ n/ dinserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
- o/ O9 }: L: C# Linserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);: x3 j, | h( t& {
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
, r) t+ ^- J/ Q: h9 M! ]" [! k* z& A3 \7 b: {. e% n
3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
/ Y, @% @; A% a1 K; ?; a- ]9 J( I) V( I7 L
4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
7 P% b' L) ^0 \, n5 S- Y1 b7 Wtreenode oldtask = gettasksequence(centerobject(current,1),1);1 o* I# z( ?* P0 G$ J& z' O& R
destroyobject(oldtask);
8 g0 D4 j% J% i& v8 r4 d
8 q1 g; e b5 h—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|