|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑
& e( ^) k- I+ a9 V1 v$ h$ F6 Q* I# n+ e* \& \
忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask; ~8 T- q! B$ |% c
1 J% S% }$ ]+ c6 ]
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,$ M; x" l! e( K( Y8 b
' W6 A3 s ^/ v& t5 B: Z( r
2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
# i2 I+ d. Z) C [8 ftreenode Queue3 = centerobject(centerobject(current,1),1);
+ q3 c* \: b, ]! Pinserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
8 _5 l8 i; Q' J7 x- c; z7 Oinserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);: n, @9 @' X7 X& G8 Z
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
' O8 c& Q9 i3 l! U7 k" s# S" C5 B: M% w7 `+ B/ l9 q9 k& j
3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;" z* l- X7 `# E0 E% C
! b" a2 h$ N5 T! M, I% L: R- j& ^
4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:; l4 M( i0 D+ V T7 V9 Q
treenode oldtask = gettasksequence(centerobject(current,1),1);3 {8 h+ q: b* Q" v% A
destroyobject(oldtask);
; z. R2 D: J; k8 x& t
9 G6 I4 p- j4 O2 u, G—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|