|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 . K- H$ I0 p/ { |
. p& D$ m. s/ a7 H# H忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;
& M! z: d; P. B2 }6 l3 N$ T. }/ ~( S9 U$ s
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,( J' I' U/ ]% w2 a- n. ~
' N; W+ h% _- U% x2 I' E" F
2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
- g3 C6 F# W( X4 }treenode Queue3 = centerobject(centerobject(current,1),1);( o! t/ }0 T/ `. v9 z
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
/ ]/ W1 ]% \2 k! r2 r- binserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);- B* ~# Y) R) l F; D8 Q/ f% y. Q! i
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
! ~0 c2 L( \' ^( P3 f: F6 H1 q1 O7 D J5 D* V$ O7 n9 l0 ?9 z
3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;% G# ?; \+ ]" D5 g$ A
6 H! r$ A3 [. P6 [+ }
4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
. `) ^; u* n' r5 t5 xtreenode oldtask = gettasksequence(centerobject(current,1),1);
4 `! _, N/ V, _) Fdestroyobject(oldtask);
) ~8 j9 s* t( L/ |% k
N( `# `1 l& ^) v9 k3 X—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|