|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑
7 `2 O, F6 J: H. G7 J# ?7 Q% m5 k: T7 y0 J0 z" c" z
忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;
7 g/ F5 t' t. r# h. S, }7 T7 W) J0 B# g( B7 h/ J. V
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
n) Q2 K# V( x2 m
8 ]% ^/ Y0 z+ G2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
% V: u/ _1 ?: T4 e9 ^treenode Queue3 = centerobject(centerobject(current,1),1);
, @! p9 J _+ G1 M/ D! b9 rinserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
% ]0 \: f. P m7 t' D9 v9 V0 K. ainserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);6 X* I- d/ H" v
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
. ^: y# g7 _ y2 r4 `2 W, o7 n' g. A6 y: P! v
3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
7 t, ]& A6 X0 v. T- G S* B$ b$ {8 s/ d! _8 h
4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:4 P+ @0 D: y: p; W8 J
treenode oldtask = gettasksequence(centerobject(current,1),1);: Q2 f* }! F1 ~
destroyobject(oldtask);: E5 ~! A3 y4 J, N- w1 b
. L, Q8 e9 o* E—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|