|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 % ~. F1 q- z# ?# R6 E1 H
5 [0 o6 ]1 j4 L) {5 y忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;) ^2 S, p9 q8 o/ N& O
5 k E+ ?- k' p, i- I3 _0 k' b- M1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
- o% g" N; S7 x4 {
6 m2 q/ j8 X% S1 m2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
$ C- _$ g* C5 R6 vtreenode Queue3 = centerobject(centerobject(current,1),1);9 O8 }. u# m+ w- q
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
+ V: }% \# N H; u% B3 Tinserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);) n$ q7 J: C0 y) J, l: P
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
6 V- A2 H3 w' g
& h: H7 m" u d0 Y3 ]: }+ e3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;3 |6 ]' P3 c2 K
/ q6 I7 }3 q& o4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
3 m- I' `3 _1 y. rtreenode oldtask = gettasksequence(centerobject(current,1),1);5 i% X6 M+ G) d3 H% P3 F8 c
destroyobject(oldtask);
9 l9 \: Y0 M! S2 H& I3 D* n* G H
# n2 j# Y3 l7 ~( c* n8 h—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|