|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑
1 Z& h, l$ |! h" h- d: h7 [8 h
/ y: j/ ]9 b% e% {8 ?) X忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;, |, t) D" e u0 ]& W
3 ]* [( Z# R# @. S
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,% Q1 E2 j1 k. x# {) l
L. W$ y2 g3 G% w0 W2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
0 ?! A. V( x, r# m' m1 H$ rtreenode Queue3 = centerobject(centerobject(current,1),1);6 B/ p. a6 C! ^* H1 L" O
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);& Q, |4 x, P) P, P& f- a7 x5 D! g
inserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);( _3 C2 i! d6 }1 B# W, W
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;# | V. x, {0 _3 |5 S l* `
1 K8 g H. T' m) g
3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;% [+ S. _' R7 a1 S& M5 ]' D* u
- g( Y+ S. a+ X# l& V7 o4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
- j" _; ~( k. \+ Y" E( ?, Otreenode oldtask = gettasksequence(centerobject(current,1),1);) ?1 i4 q9 c+ M2 `5 k' P/ G0 r
destroyobject(oldtask);
/ v/ Y4 _- r5 N( p; w
! J* p3 \+ X Y6 U3 w. R—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|