|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 . c# f6 J0 W4 p
! S; b; N* p; s忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;
% l2 k. v/ }- C# z/ D; x0 q1 O; S/ T$ M( j. [8 j
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,4 [% q& A# b4 M# y" S+ ^* p j
( p' b, \" g2 i9 d3 k2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
$ {! \1 m% o2 d- ]: o: Ftreenode Queue3 = centerobject(centerobject(current,1),1);. z3 A, H: ^4 w" W, \
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);1 n" C9 T% M: z8 M3 _" E+ W' _* E
inserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);
! e) k" ~% n5 j( r; T意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;% c! a; G+ C5 f' [
' J( Y9 C! I4 j2 B7 L( T4 V1 Z
3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
( Q" `! @0 m9 J u; h. Q* z w9 P9 ~! }0 a; D7 c! Y
4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
* _# s1 N" F+ X1 a; Htreenode oldtask = gettasksequence(centerobject(current,1),1);
6 r$ c0 F: q+ ^0 J8 Pdestroyobject(oldtask);# \/ E- L# v; T8 O" J" L% q
/ x. S/ _5 I% ] d. v1 x—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|