|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑
% n3 N! j' N/ w( y) j% o# |: z( m$ G& {+ X' a- j: z
忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;
0 a) k+ k( E3 e" b7 o; u2 c7 J2 i7 I1 M. W; y$ ~& ]+ i
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
# P a5 u9 d/ ]$ C8 I! S" J0 t; f N. b) x8 X Q
2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
% |3 h" {+ K. U1 l5 ]2 u% Utreenode Queue3 = centerobject(centerobject(current,1),1);, r$ H9 W T+ X
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
. t3 T$ T0 s& Ainserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);
1 h3 X, m* S- j' r. C意思是将已经搬运的item放回到原来的那个Queue,然后执行新的; W% K# F3 m( g/ G; k
, i% P. n3 q9 W) m7 R
3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
9 @0 ^' `7 Q& a |7 [+ y* z# K4 \% z, s8 g: }2 ]5 k9 L2 O' k# F
4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:) ` H2 S v4 e; L" ]5 [$ X
treenode oldtask = gettasksequence(centerobject(current,1),1);& a- h2 \) T1 V/ M0 T/ d1 a
destroyobject(oldtask);& `2 @2 j. f$ t" {) o
* \5 |" l) ?, P( r$ w+ |
—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|