|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 1 O" ?& ~. k, m& B% Z+ i# j% U
' U/ Q6 E" I) V z3 d' V% c! t
忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;3 T n3 b" N4 t2 W0 L3 Q3 g4 @1 a
% T- a* t' @* E1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
1 h4 N6 K( q/ i& ? k! n! X
- L6 W: t( a* g$ s$ p# B# L' \2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:- Z- D% Y' U9 Z* v+ ]5 u
treenode Queue3 = centerobject(centerobject(current,1),1);; \5 H7 \+ r& J/ H0 a
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);5 n" _& l* d; ?5 ^# K" k9 N [& x
inserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);* R6 V6 d6 L: v# o) H
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
4 H( u2 A2 S- [& ^* _! q/ {! Q
4 _6 y, L4 d; \% I+ |5 C3 ^. C3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
- [% ^. e e9 R% @ e) Y3 z0 P& {3 V
4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
0 {; M' t1 O! U8 Y# Y+ ftreenode oldtask = gettasksequence(centerobject(current,1),1);. s Z* a& T: \9 G% Y2 O P
destroyobject(oldtask);
& _4 p/ s5 I4 n( k9 ]% d9 ^6 G2 J! A5 f5 `4 E( b8 B
—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|