|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 $ k3 H# M1 ]1 i0 @3 c) T
7 \* [0 m) h% u% x3 ~ L$ @; }6 |忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;
2 \( j6 z0 l/ A/ \0 U* c" q, x V( }$ o1 V9 m4 {# W2 k, s+ w6 L
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
5 J% V" ^+ B8 Q3 L: p* g+ Y
- x0 e# h, s# K8 Y# L2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:4 l, U& g) Z2 F0 S* S
treenode Queue3 = centerobject(centerobject(current,1),1);
. o% `. N& w% g% minserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);2 i* X x9 {/ Y4 W/ V( B/ y7 a* D
inserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);
, P) g7 E. c. F; O意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
' n; g( M4 N" M) |9 c
3 `9 w; ]/ p1 S& Z3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
# Z" L6 F" y0 u& B: D9 Q
6 {9 i! [. w& G: a7 C, Y7 a% D# Q) Q4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
* p$ a$ O* q1 Z+ E! X9 l( O0 W8 Jtreenode oldtask = gettasksequence(centerobject(current,1),1);1 s) Y/ ~! }8 o2 V
destroyobject(oldtask);
4 Z& z: Z- r& Q5 X
8 D% m/ u& O4 r) a8 e. T+ Q- c5 J, b—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|