|
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 ; V3 f5 U+ T2 J" U
- {; {* h" D! C4 ?
忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask; I* |, @1 j& B7 f1 A' Q
& I7 z3 j5 r# Q8 u u$ {; F# d
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
+ i, I$ t# A/ V- t. w# V6 e1 y) h9 ]8 c, T. B o
2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:
) Z/ z) L6 A) F5 g& l2 U! t' E9 Ftreenode Queue3 = centerobject(centerobject(current,1),1);+ Q2 E) t2 Y, m( M
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
6 |9 i$ k9 o; b x) h# `( v" Vinserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);- E! p: O& P* `
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
* S: I5 e9 b' _- _! B; Y% a4 E
$ L# c1 h1 k& g3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
& n6 q# l% o( @+ {6 C) o" l v" y9 k' c# o$ D+ N( p
4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:' Q( h, K, ]$ H3 {, T
treenode oldtask = gettasksequence(centerobject(current,1),1);: R+ H9 `3 |& V" U! G! D" y! K5 G
destroyobject(oldtask);
* e* C+ i( ^5 |7 F4 K/ H% @- t" M! i( U! u w& i
—— |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|