|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑
$ o- _& L, s1 Q) f8 l$ j7 u0 p& U) D' \/ t
忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;
3 c! N; u+ D8 `, k5 n% a, @2 I# ?; v' l" Y7 Q) d
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,: X2 ?$ @- l6 L1 p( }8 u- I& `5 d* e
9 N2 J% `) J0 g" J; d o6 z2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:* C/ g' K1 \/ h& J
treenode Queue3 = centerobject(centerobject(current,1),1);
* N+ D2 u9 C5 A" ?! Linserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);, i! _( G# E# W% N3 C7 s6 A
inserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);& v4 \+ R1 o% i' Z, q
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
% J4 i5 T* @$ e
: W1 {4 C6 K, Z3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;' b' r1 p5 `% q" A' U/ E' {
9 n \! M+ d5 W- b/ v) i
4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
( o$ j9 K2 T1 }; w9 \- [treenode oldtask = gettasksequence(centerobject(current,1),1);
7 s- U7 i7 B8 b* X5 b0 Y3 t) idestroyobject(oldtask);8 N- F, f& X- Z6 |. X; I7 [8 T" |
/ ^, v9 @/ I G# r3 Q—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|