|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 * {8 L3 l0 n$ c o) r3 A8 f
! p2 k$ d3 m" x# B
忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;, U' g' A' t0 o/ r; h2 S; a
* ~- t8 p! k8 n# Z4 \1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,' A: i% P2 ]3 {1 n
, s; z" {. P1 _3 B! i
2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:" y, B8 p# }1 H; O \
treenode Queue3 = centerobject(centerobject(current,1),1);+ t% A, T. ^$ t( u% s
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);. |* f4 v: ` [, r/ [; J
inserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);# {( [& t5 j5 T$ `- ~3 F
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
0 ?, J6 a# F c9 h7 J$ N" A. q
+ Y5 O) z& x' |3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
5 P9 u3 T3 V; Q0 G: t
/ r+ J& K+ e/ o3 k, C' ~5 `/ P9 ?) h4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
I$ u9 f$ K: R( n4 Ntreenode oldtask = gettasksequence(centerobject(current,1),1);& u0 l9 m/ [8 U# U0 N' O
destroyobject(oldtask);
, @& s7 K3 N. ]' C! ^+ e
5 l0 x1 q+ t7 X+ [7 R- Y/ G6 W—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|