|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 $ x5 e1 V4 h- n
: @3 U& Y8 f6 n/ n* ^3 A3 H
忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;3 H; o/ {# H- T' Y* K! W% V, o
6 L+ f! g, P0 [) y1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,* ]+ U9 M( C! N3 v5 H
$ v2 L6 M# ~' C* [- h, y8 h7 [2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
- A! @7 d4 A. \- M9 Vtreenode Queue3 = centerobject(centerobject(current,1),1);; G5 L+ H! P6 i- K3 `7 ]
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
! Q0 J3 T' {; }inserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);
: z! O4 a2 o" @' U意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;" M! P f6 {% J* \% J! G
" h# C# y* |* e7 d) r+ X8 C" Q& n3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
# v- Q6 H/ l: \$ R' `3 Y
) R6 B; D1 e( ?" P5 \4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:; D; Q" q9 V3 s) K7 P
treenode oldtask = gettasksequence(centerobject(current,1),1);
1 [8 N8 N" |$ ndestroyobject(oldtask);3 w* a" @7 ], Z) C+ l
$ L: @6 _1 }, Y1 l, \6 B
—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|