|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 / j: |; n: r! C) \" q$ G% H4 v* b$ b
7 X" U1 W$ D* v$ [, O& K9 H' h" D忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;8 a) i a) s- B; g! Q$ J
" p; i" ~: _2 w0 O1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
, ?2 F" n# Y" u- E# @/ p
8 m p& u( H% A' u3 M5 T1 x2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
9 F8 D7 t1 k; I2 i- B' U ttreenode Queue3 = centerobject(centerobject(current,1),1);
P3 ]9 F+ g/ ?$ a# Tinserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);8 ]+ m$ n# Q) b* l1 o9 F
inserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);
" a' ]2 j, q9 u% ~0 ^意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;4 X- k8 ?/ m: w7 y' d" {1 w" g
+ G) I- J0 C7 g7 d
3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
# z% b8 g' X, F* R+ p- b1 T2 o
* i6 B2 f& {$ z+ I% J# Q& G/ e4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中: Y2 F# ~* y3 P' _8 F+ S2 i( [
treenode oldtask = gettasksequence(centerobject(current,1),1);
6 d+ T' y, |! Q P8 `2 V0 r2 N- B5 Fdestroyobject(oldtask);
' C7 S4 [5 r" c: @$ P h1 K3 w, A! D
—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|